loop-animation

ピクセルの崩落Pixel Fall

ドット絵の図形がブロックごとに下へ崩れ落ち、画面の上から降ってきて元の位置に積み上がる動きです。

Canvas 2D で、図形を 1 つずつ計算して描いています。初期設定で再生しています。

ドット絵の図形がブロックごとに下へ崩れ落ち、上から降ってきて元どおりに積み上がる

このシーンで作る

パラメータ、色、エフェクトを変えて、GIF・APNG・WebP・MP4・WebM で書き出せます。

どう計算しているか

  1. マス目の中心が図形の内側にあるかを式で判定し、内側のマスだけをドットにします。ハートは (x² + y² − 1)³ − x²y³ < 0、ひし形は |x| + |y| < 定数 のような不等式です。
  2. 各ドットの遅れは、下の行ほど小さくなる値×「崩れる順のばらつき」に、疑似乱数×「ランダムさ」を足したものです。下の行から先に崩れます。
  3. 時刻 u = fract(t − 遅れ) を「止まっている時間」・落ちる区間・戻る区間に分けます。落ちる区間は y = 元の位置 + D·k² で、加速しながら画面の下へ出ていきます。
  4. 戻る区間は y = 元の位置 − D·(1 − k²) で、画面の上から加速しながら降りてきます。止まっている時間の最初に、減衰する sin で小さく跳ねて着地を表します(「着地の跳ね」)。
fall: y = y0 + D·k²,  return: y = y0 − D·(1 − k²)

ループがつながる理由

落ちる区間の終わりではドットは画面の下の外、戻る区間の始まりでは上の外にいるので、位置が飛んでも見えません。戻る区間の終わりと止まっている時間の始まりは元の位置で一致し、u は fract で1ループに1回巡ります。

調整できるパラメータ

形

図形ハート・丸・星・リング・ひし形・全面
ドットの数6 〜 60(初期値 22)
大きさ0.3 〜 1.2(初期値 0.85)
すき間0 〜 0.4(初期値 0.08)

動き

止まっている時間0.1 〜 0.8(初期値 0.4)
崩れる順のばらつき0 〜 0.5(初期値 0.18)
ランダムさ0 〜 0.3(初期値 0.06)
着地の跳ね0 〜 40(初期値 10)

同じ分類のシーン(タイル・格子)