前のページの煙のコードを応用して、炎を表現してみましょう。
|
|
screen.clearColor = .darkGreyで背景を暗灰色にします。
forで160個の加算合成マスク画像PGAddMask()を書きます。 画像ファイルはmask-smokeを指定します。
- 初期設定のコードを書きます。
.color( LLColor( 0.9, 0.34, 0.22, 1.0 ) )- 色。少しオレンジがかった赤を設定します。
.position( cx:(-50...50).randomize, cy:(-120... -110).randomize )- 位置。x方向は-50~50のランダム座標, y方向は-120~-110のランダム座標を設定します。 (xはある程度のブレがあり、yはほとんど違いのない位置になります)
.deltaPosition( dx:(-1.0...1.0).randomize, dy:(0.5...4.5).randomize )- 毎フレーム、x方向に-1.0~1.0のランダムな等速移動量、y方向に0.5~4.5のランダムな等速移動量を設定します。 (yのプラスが大きいので、画面上方向へ大きく移動します)
.scale( square:80.0 )- 大きさ。80.0ポイントを設定します。
.deltaScale( dw:0.5, dy:0.5 )- 毎フレーム、0.5ポイント拡大します
.angle( .random )- 角度。0.0~1.0のランダムから開始します。
.deltaAngle( degrees:(-2.0...2.0).randomize )- 毎フレーム、-2.0~2.0度のランダム値で等速に回転します。
.life( .random )- ライフ。0.0~1.0のランダムから開始します。
.deltaLife( -0.01 )- 毎フレーム、lifeを0.01減少します。
.iterate{ }を用意して、毎フレームのalphaの処理を計算します。.lifeが0.5より小さいとき、$0.life * 2.0を設定します。.lifeが0.5以上のとき、(1.0 - $0.life) * 2.0を設定します。
上記の計算により、lifeが0.5の時、もっとも濃く描画します。lifeが0.5より少ない、あるいは多いときは薄くなります。
.completion{ }を用意して、図形を再利用します。.position( cx:(-50...50).randomize, cy:(-120... -110).randomize )- x方向は-50~50のランダム座標、 y方向は-120~-110のランダム座標に再配置します。
.scale( square:80 )- 大きさを縦横80ポイントに戻します。
.life( 1.0 )- ライフを1.0に回復します。
- 「コードを実行」を押します。
目標
- 炎が立ち上がるエフェクトが表示されたら成功です。