ここでは、「game01」というディレクトリ内で作業しているという前提で説明しています。
敵の爆発をつくる
ここまでの状態では、敵に弾が当たるとそのまま消えていました。
それでは寂しいので爆発パターンをパーティクルで作ってみます。
まず、「burnControl.coffee」と「burnParticle.coffee」というクラスを新規に作成します。
ゲームのトップディレクトリ(game01直下)で、下記コマンドを実行して、「src」ディレクトリにクラスファイルが生成されていることを確認してください。
監視コマンドが実行されている場合は、自動でコンパイルされます。
$ enforce derive burnControl
$ enforce derive burnParticle
クラスファイルの生成が終わりましたら、「burnControl.coffee」の「constructor」に、
@num = 0
を追記します。
次に、「behavior」を下記のようにします。
behavior:->
super()
switch @_processnumber
when 0
addObject
motionObj: burnParticle
image: 'bear'
x: @x + (rand(8) - 4)
y: @y + (rand(8) - 4)
xs: rand(6) - 3
ys: rand(6) - 3
scaleX: 1.5
scaleY: 1.5
gravity: 0.5
width: 32
height: 32
animlist: [
[100, [0]]
]
@num++
if (@num > 15)
removeObject(@)
ここの処理は、「burnParticle」クラスオブジェクトを16個生成しています。
実際にゲームを作る時は爆発パターン用のスプライト画像を用意しますが、このチュートリアルではデフォルトで設定されている「chara1.png」をそのまま使います。
生成する時の座標は、「burnControl」が生成された時に渡されたx座標、y座標それぞれに「-4〜4」までの乱数を足した数に設定し、x方向とy方向の加速度は、「-3〜3」までの乱数に設定します。
スプライトの見掛けのサイズを1.5倍にしています。
重力は自機の半分で0.5に設定しています。
「burnParticle」を16個生成し終わると、自分自身を削除します。
次に、「burnParticle.coffee」を修正します。
「burnParticle.coffee」は、「behavior」だけを下記のように修正します。
behavior:->
super()
switch @_processnumber
when 0
@opacity -= 0.02
@scaleX *= 0.95
@scaleY *= 0.95
if (@opacity < 0.0)
removeObject(@)
この処理は、自分自信の透明度(初期値は1.0)から毎フレーム0.02づつ減算していき、x方向とy方向それぞれの拡大率を毎フレーム0.95倍していくというものになります。
そして、透明度が0.0を下回った場合は、自分自信を削除しています。
最後に、敵に弾が当たった時の処理を修正します。
「enemy01.coffee」の「burn」メソッドの、
removeObject(@)
の前に、
@burnControlObj = addObject
type: CONTROL
x: @x
y: @y
motionObj: burnControl
を追記してください。
敵に弾が当たった時に、爆発パターンオブジェクトを生成しています。
画面にスプライトを表示する必要にない制御用オブジェクトでは、オブジェクトの元になるクラス名を渡すだけでいいはずなのですが、この処理ではx座標と、y座標を渡しています。
これは、「burnControl」で生成するパーティクルに爆発する敵の座標を渡す必要があるからです。
これで、敵に弾が当たった時は破片が飛び散るような感じになると思います。
チュートリアル(9) <--- ⬛︎ ---> チュートリアル(11)