実は花火の元となる画像はこんなに汚いです
これを何枚も加算合成して、光ってる感じを出させてます。
さて、次は花火の「軌道」を確認します。
最初花火の玉が爆発して、放射状に↑の画像(以後パーティクルと呼ぶ)がとびちります。
そのあと、重力の影響を受けながら薄く消えていきます。
好きな人は、空気抵抗とかもお好みでつけたりします。
このプログラムに特殊な命令は必要ありません。全部四則演算で事足ります。
まず用意しなければいけないのは、配列変数です。
しかし、ただの配列ではなくて2次の配列です
今回はx成分、y成分、薄さの値など要素が多いので、1次だと少し不便です(できなくはないが)
dim par,100,5
と、100×5の2次の配列をつくります。
parは花火のパーティクル100個の座標などさまざまなパラメーターを代入する変数です。
X座標、Y座標、Xの速度、Yの速度、寿命。
この5つのパラメーターを2次の配列に記憶させます。
たとえば
par.12.1
と言ったら、花火の12番目のパーティクルのY座標の値のことを意味します
寿命の項目には、花火生成のときあと何フレームで消えるかの数値を入れておいて、まいフレームごとに
値を1ずつ減らしていきます。0になったら、パーティクル消滅とさせます。
(当然変数字体は消滅しないので、描画命令を読ませないプログラムにしろ、ということです)
花火生成プログラムですが、火薬玉爆発の瞬間は花火のパーティクルの位置は同じなので、同じ値を代入しておきます。
そして放射状に吹き飛ぶようにしたいので、速度のパラメーターのところに、それぞればらばらな値を入れておけばいいんです。
repeat 100
rad=3.1415*rnd(100)*0.02
par.cnt.2=10.0*cos(rad)
par.cnt.3=10.0*sin(rad)
loop
これでパーティクルの初期設定は完了。
あとは毎フレームごとにX座標、Y座標にXの速度、Yの速度を加算していけばいいだけです。
par.cnt.0=par.cnt.0+par.cnt.2
par.cnt.1=par.cnt.1+par.cnt.3
という操作です。
しかしこれでは飛び散ってしまう一方なので
ここで、重力の概念をプログラム化します。
重力は下に働くのでYの速度を毎フレームごとに1とか2プラスしてあげれば
パーティクルの動きが放物線になります。
par.cnt.3+=2
最後に寿命ですが
加算合成の合成%をgmodeで指定するとき、寿命の数値が小さくなればなるほど合成%も小さくなるように
指定します。
そうすれば、花火の先が徐々に薄くなっていくプログラムも完成です。
次回: 不明・・・