0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

enchant.jsとtmlib.jsを使ったゲーム作成フレームワーク「enforce」チュートリアル(10)敵の爆発を作る

Last updated at Posted at 2015-01-21

ここでは、「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)


enforceチュートリアル一覧

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?