波紋と称して、大量の円が広がっていく様子を描画しようと思います。
入れ物の用意
■波紋
・X{=0}
・Y{=0}
・TIME{=0}
・有効{=0}
波紋配列とは配列
波紋初期化
●波紋初期化
rとは変数
rを0から100まで繰り返す
波紋配列[r]に波紋をグループコピー
配列の変数を一つ用意して、要素にグループコピーしたものを用意します。
なでしこのマニュアルにある、「部品を動的に生成する」と同じです。
マニュアルでは「として作成」で例がでていますが、「グループコピー」でも動くみたいです。
とりあえず波紋配列[0]から波紋配列[100]まで用意しました。
毎フレーム更新
//毎フレーム呼ぶ
//中心がX,Y、半径がTIMEの円を描く
//100フレームで消える
●波紋更新
xとは変数
yとは変数
tとは変数
rとは変数
線太さは1
塗スタイルは「透明」
rを0から100まで繰り返す
もし(波紋配列[r]→有効==0)ならば続ける
x = 波紋配列[r]→X
y = 波紋配列[r]→Y
t = 波紋配列[r]→TIME
裏イメージの(x-t),(y-t)から(x+t),(y+t)へ円
波紋配列[r]→TIMEに1を直接足す
もし波紋配列[r]→TIME>=100ならば
波紋配列[r]に波紋をグループコピー //初期化
●波紋更新
という関数を用意します。
これを1フレームごと、今回は0.04秒ごとに1回呼び出します。
呼び出されるたびに行うのは……
・有効==1なグループだけに対して以下を行う
・中心がX,Y、半径TIME(時間で増加)の円を描く
・TIMEを1増やす
・TIMEが100になったら消滅(初期化)
となります。
これだけでは有効が1の波紋がありません。
中心x,yを指定して●波紋作成(x,y)したときに有効=1を入れることにします。
//未使用の波紋配列[r]を探して中心を設定
●波紋作成(x,y)
rとは変数
rを0から100まで繰り返す
もし(波紋配列[r]→有効==1)ならば続ける
波紋配列[r]→X=x
波紋配列[r]→Y=y
波紋配列[r]→TIME=0
波紋配列[r]→有効=1
抜ける
配列の[0]から順にみていって、有効==1でないグループを探します。
中心点X,Yに値をコピーして、有効を1にします。
これを仮に8フレームごと、0.04秒*8=0.32秒ごとに呼びます。
ゲームループに組み込む
//ゲームループ
1でループ
もし回数%8==0ならば、波紋作成(乱数(300),乱数(300))
波紋更新()
裏イメージを表イメージの0,0へ画像コピー
裏イメージを画面クリア
0.04秒待つ
8フレームごとに波紋作成(x,y)
1フレームごとに波紋更新()
バックバッファから転送
0.04秒待つ
これをループさせるとこうなります。
完成品
!変数宣言が必要
表イメージとはイメージ
そのサイズは「0,0,600,400」
裏イメージとはイメージ
そのサイズは「0,0,600,400」
その可視はオフ
■波紋
・X{=0}
・Y{=0}
・TIME{=0}
・有効{=0}
波紋配列とは配列
波紋初期化
●波紋初期化
rとは変数
rを0から100まで繰り返す
波紋配列[r]に波紋をグループコピー //配列にグループを入れる
//未使用の波紋配列[r]を探して中心を設定
●波紋作成(x,y)
rとは変数
rを0から100まで繰り返す
もし(波紋配列[r]→有効==1)ならば続ける
波紋配列[r]→X=x
波紋配列[r]→Y=y
波紋配列[r]→TIME=0
波紋配列[r]→有効=1
抜ける
//毎フレーム呼ぶ
//中心がX,Y、半径がTIMEの円を描く
//100フレームで消える
●波紋更新
xとは変数
yとは変数
tとは変数
rとは変数
線太さは1
塗スタイルは「透明」
rを0から100まで繰り返す
もし(波紋配列[r]→有効==0)ならば続ける
x = 波紋配列[r]→X
y = 波紋配列[r]→Y
t = 波紋配列[r]→TIME
裏イメージの(x-t),(y-t)から(x+t),(y+t)へ円
波紋配列[r]→TIMEに1を直接足す
もし波紋配列[r]→TIME>=100ならば
波紋配列[r]に波紋をグループコピー //初期化
//ゲームループ
1でループ
もし回数%8==0ならば、波紋作成(乱数(300),乱数(300))
波紋更新()
裏イメージを表イメージの0,0へ画像コピー
裏イメージを画面クリア
0.04秒待つ
今回は8フレーム毎に乱数のx,y座標に波紋をつくりましたが、クリックしたところを中心にするなどするとゲームのエフェクト作りに役立つと思います。