рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╢рд╛рдирджрд╛рд░ рд╡рд┐рдирд╛рд╢ рдПрдиреАрдореЗрд╢рди (рдкрд┐рдХреНрд╕реЗрд▓ рдзреВрд▓)

рд╣рдорд╛рд░реЗ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдЧреЗрдо рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдо рдПрдХ рджреБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рдереЗ: рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд╛рд╢ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдХреИрдирд╡рд╛рд╕) рдореЗрдВ рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдпрджрд┐ рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ (рдпрд╣ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд▓рд╛рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ), рддреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╣ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 60FPS x 64 x 4 рдмрд╛рдЗрдЯреНрд╕ ~ 1 рдПрдордмреА / рдПрд╕ рд╣реИред рдПрдХ рддрддреНрд╡ рдкрд░, рдФрд░ рдЕрдЧрд░ рдЙрдирдореЗрдВ рд╕реЗ 40 рдПрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рд╣реИрдВ?



рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдп рдпрд╣ рд╣реИ: рдПрдЪрдЯреАрдПрдордПрд▓ 5 (рдХреИрдирд╡рд╛рд╕) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рднрд╛рд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рднрд╛рд╡ рдХреЛ 32x32 рд╕реЗ 64x64 рдкрд┐рдХреНрд╕рд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЫрд╡рд┐ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд╝реНрд░реЗрдо рдХрд╛ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ 60FPS рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЦреЗрд▓реЗрдВрдЧреЗред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рди рдбрд╛рд▓реЗрдВ, рд▓реЗрдХрд┐рди 60FPS x 64 рдЪреМрдбрд╝рд╛рдИ x 64 рдКрдВрдЪрд╛рдИ x 4 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рд▓рдЧрднрдЧ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕реЗрдХрдВрдб рдкреНрд░рддрд┐ рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдПрдХ рдкреНрд░рднрд╛рд╡ рдХреЛ рд╕реИрдХрдбрд╝реЛрдВ рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рд░рд╣рддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреА рдЧрдгрдирд╛ рдмрдиреА рд╣реБрдИ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд░реЗрдЦрд╛рдкреБрдВрдЬ рдХреЛ 2x2 рдпрд╛ 4x4 рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдЖрдХрд╛рд░ рдореЗрдВ рддреЛрдбрд╝рдирд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд╕рд╛рде рдЙрдирдХреА рдирдИ рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрдиреНрд╣реЗрдВ рд░реЗрдЦрд╛рдкреБрдВрдЬ рдореЗрдВ рд░рдЦрдирд╛ рд╣реИред рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдФрд░ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЛ рдХреБрдЫ рджреНрд╡рд┐рдШрд╛рдд рдХрд╛рдиреВрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдордп рдкрд░ рднреА рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "рд╣реАрдк" рдХрд╛ рд░рдВрдЧ 0x323232, рдЕрд▓реНрдлрд╛ рд╕реЗ 1.0, рдкрд┐рдХреНрд╕реЗрд▓ рдмрд░рд╛рдмрд░реА рдХреА рджрд┐рд╢рд╛ (рдмрд╛рдПрдВ / рджрд╛рдПрдВ) рдХреА рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ (рдЕрд▓реНрдлрд╛ 0) рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рддрд░рдВрдЧ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдХреБрдЫ рджреВрд░ рдХреА рдУрд░ рдЙрдбрд╝ рдЬрд╛рдПрдВрдЧреЗ, рджреВрд╕рд░реЗ рдмрд╕реЗрдВрдЧреЗ рдФрд░ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдХрдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреНрд░рд╕реНрдерд╛рди рдЧрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛрдиреЛрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рдХреЛ рдкрд░реНрд▓рд┐рди рдХреЗ рд╢реЛрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, V8 рдкреВрд░реА рддрд░рд╣ рд╕реЗ 60xPS рдкрд░ 48x48 рдХреЗ рдФрд╕рдд рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрди рдкреНрд░рднрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ 40 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рддреЗрдЬ рд╣реИред ( рдЙрд╕ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВ )



рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡ рдХреЛрдб
//       var test = [], test2 = [] for (var i = 0; i < 256; i++) { test.push(0); test2.push(0); } //  - Effect = function () { this.buffer = document.createElement('canvas'); }; // ****       -,    //       (new Effect()) Effect.prototype.ready = function () { return this.progress >= 0.99; } //    // w, h -       // part -     // dir -   , -1 , 0  , 1  //               , //     this.w2 //        Effect.prototype.init0 = function (w, h, part, dir) { this.buffer.width = dir == 0 ? w : 2 * w; this.buffer.height = h; this.dir = 0; this.sx = 0; this.w = w; this.w2 = w; this.h = h; this.dir = dir; if (dir == -1) { this.sx = w; this.w *= 2; } if (dir == 1) { this.w *= 2; } this.wp = w / part; this.hp = h / part; this.part = part; return this.buffer; } //      ,      (x, y) Effect.prototype.init1 = function (x, y) { var context = this.buffer.getContext("2d"); //    var data = context.createImageData(this.w, this.h); //   var orig = context.getImageData(0, 0, this.w2, this.h); //  : 0 -  , 1 -  , 2 -   , 3 -    var parts = []; //     ,    1 var px = [], py = []; //  ,      var vx = [], speed = []; //           var noise = GenerateRandom(this.wp, this.hp); var k = 0; var part = this.part; for (var j = this.hp - 1; j >= 0; j--) { for (var i = 0; i < this.wp; i++) { var x0 = i * part; var y0 = j * part; var c = 0; for (var dx = 0; dx < part; dx++) for (var dy = 0; dy < part; dy++) { var t = (x0 + dx) + (y0 + dy) * this.w2; if (orig.data[t * 4 + 3] != 0) { c++; } } var r = noise[k++] px.push(x0 + this.sx); py.push(y0); //      if (c * 2 >= part * part) { speed.push(1.2 * r + 0.75); if (r > 0.5) { parts.push(3); } else { parts.push(2); } } else { speed.push(0); parts.push(0); } } } //     this.level = []; for (var i = 0; i < this.w; i++) this.level.push(this.h); this.parts = parts; this.vx = vx; this.speed = speed; this.px = px; this.py = py; this.context = context; this.data = data; this.orig = orig; this.progress = 0.0; this.x = x; this.y = y; return this; } //     img,    Effect.prototype.init01 = function (x, y, w, h, part, dir, img, imgX, imgY, imgW, imgH) { this.init0(w, h, part, dir); var context = this.buffer.getContext("2d"); context.drawImage(img, imgX, imgY, imgW, imgH, 0, 0, w, h); this.init1(x, y); return this; } //               Effect.prototype.draw = function (context, x, y, w, h) { if (w === undefined) { w = this.w2; h = this.h; } if (this.dir == -1) { x -= w; w *= 2; } if (this.dir == 1) { w *= 2; } context.drawImage(this.buffer, x, y, w, h); } //    , progress -       , this.progress  0.0  1.0 Effect.prototype.update = function (progress) { this.progress += progress; var c = 100; var data = this.data.data; var orig = this.orig.data; var wp = this.wp; var hp = this.hp; var part = this.part; var h = this.h; var w = this.w; var k = 0; var w2 = this.w2; // test -   , test2 -    var p = this.progress; var p2 = Math.min(p * p, 1.0); for (var i = 0; i < 256; i++) { var j = i + (50 - i) * p2 | 0; if (j > 255) j = 255; if (j < 0) j = 0; test[i] = j; j = i + (255 - i) * p2 | 0; if (p2 > 0.7) j = 255 * (1.0 - p2) / 0.3 | 0 test2[i] = j; } //    for (var i = 3; i < w * h * 4; i += 4) data[i] = 0; for (var j = hp - 1; j >= 0; j--) for (var i = 0; i < wp; i++, k++) if (this.parts[k] != 0) { //   //   ,        var p = this.progress * this.speed[k]; //      var x0 = i * part; var y0 = j * part; var x = this.px[k], y = this.py[k]; var a = 1.0; //   0.2      if (p > 0.2) { p = (p - 0.2) / 0.8; //   x,          0.1, //          var px = p * this.dir + this.progress * (this.speed[k] * 10 % 0.1); if (this.parts[k] == 2) { //     x = x0 + this.sx + px * w / 2 | 0; y = y0 + p * p * this.h | 0; } else if (this.parts[k] == 3) { //   -,         x = x0 + this.sx + px * w | 0; y = y0 + p * w / 4 | 0; if (this.dir == -1) { a = Math.min(1.0, x / w2); } else if (this.dir == 0) { a = Math.min(1.0, 1.0 - y / h); y = y + p * w / 2 | 0; } else if (this.dir == 1) { a = Math.min(1.0, 2.0 - x / w2); } //   -  if (y + part > h) this.parts[k] = 0; } //    -  if (x < 0 || x + part > w) this.parts[k] = 0; } if (this.parts[k] == 0) continue; var min = 0; //    ,      if (this.parts[k] == 2) { var max = this.level[x] var num = x; //       for (var x1 = x + 1; x1 < x + part; x1++) if (this.level[x1] > max) { num = x1; max = this.level[x1]; } //    if (y + part > max) { y = max - part; x = num; this.level[num]--; this.parts[k] = 1; } } this.px[k] = x; this.py[k] = y; //         ,            if (this.parts[k] == 3 && p > 0.2) { for (var dy = 0; dy < part; dy++) for (var dx = 0; dx < part; dx++) { var s = (x + dx) + (y + dy) * w; var t = (x0 + dx) + (y0 + dy) * w2; s *= 4; t *= 4; data[s] = test[orig[t]]; data[s + 1] = test[orig[t + 1]]; data[s + 2] = test[orig[t + 2]]; data[s + 3] = a * orig[t + 3] | 0; } } else { //      for (var dy = 0; dy < part; dy++) for (var dx = 0; dx < part; dx++) { var s = (x + dx) + (y + dy) * w; var t = (x0 + dx) + (y0 + dy) * w2; s *= 4; t *= 4; data[s] = test[orig[t]]; data[s + 1] = test[orig[t + 1]]; data[s + 2] = test[orig[t + 2]]; data[s + 3] = test2[orig[t + 3]]; } } } //       this.context.putImageData(this.data, 0, 0); } 


рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рд╕реНрд░реЛрдд рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

Source: https://habr.com/ru/post/In153227/


All Articles