火花を散らす
衝撃の位置から飛ぶ火花。短い寿命を持った点を放射状にばらまいて、寿命が尽きたら消す。寿命を life として持ち、毎フレーム減らす。
パーティクルは、寿命と速度を持った小さな点の群れ。生成時に向きをランダムに振って放射状に撒き、毎フレーム位置と寿命を進める。life を 1→0 に減らしながら透明度や大きさに写すと、点が時間とともに薄れて消える。配列から消すときは、後ろから舐めて、尽きた要素を末尾の要素で上書きしてから pop する。順序を保たない代わりに、要素のずらしが起きず一定時間で間引ける手口が swap-pop(swap-remove)。
const a = Math.random() * Math.PI * 2 // 向きはランダム
sparks.push({ x, y, vx: Math.cos(a) * s, vy: Math.sin(a) * s, life: 1 })
// life を透明度に使って、尽きた点を末尾と入れ替えて pop
c.fillStyle = colors.tintAlpha(8, p.life)配列を後ろから舐めて、life が尽きた点を末尾の要素で上書きしてから pop する。穴を空けずに間引くので、生きている点の順序は崩れるが、splice のような後続要素のずらしが起きない。下はスペースで火花だけ出す。
スペースを叩くと、中央から 18 個の点が放射状に散る。向きはランダムで、vy を毎フレーム足すので少し落ちる。life が透明度に効いて、消える寸前は薄くなる。life が 0 を切った点だけが末尾と入れ替えて消えるので、画面の外まで飛んでも勝手に片付く。
画面シェイクと火花を同じ hit に束ねる。スペースで trauma を足し、同じ位置に火花をばらまく。揺れと火花が同時に出る。
スペースを叩くと、円がびくっと揺れて、同じ中央から火花が散る。hit の中で trauma を足し、同じループで火花を生む。trauma * trauma の揺れは数フレームで収まり、火花は life が尽きるまで飛んで落ちる。同じ「円が一個ある」絵に、揺れと火花が同時に乗る。