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」当たり判定制御

Last updated at Posted at 2015-01-24

ここでは、「game01」というディレクトリ内で作業しているという前提で説明しています。

スプライトの当たり判定について

ゲームなどでキャラクター同士の当たり判定を取ることは多用されます。
当たり判定は、通常はスプライト表示で使っている画像の矩形で判定されます。
bear03.png

しかし、これでは絵の大きさがそのままゲームの難易度になってしまい、ゲームバランスの取り方が難しくなってしまいます。
enforceでは生成されたオブジェクトの当たり判定は、指定された画像の大きさ(width, height)で取りますが、メンバー変数の

collider

にオブジェクトを設定すると、設定されたオブジェクトのスプライトサイズで当たり判定が取られます。
通常のクマですと、32x32で衝突判定が取られますが8x8の画像を使ったオブジェクトを生成し、それをcolliderに設定すると当たり判定はその8x8のスプライトと取られるので難易度が低くなります(逆に高くなる場合もあります)。
bear02.png

collider」に設定されたオブジェクトは、自動的に親オブジェクトに追随します。
collider」に設定されたオブジェクトのメンバー変数「offsetx」と「offsety」は、親オブジェクトからの表示位置差分になります。
オブジェクトの持っている座標値はスプライトの中心なので、親オブジェクトの中心からどれくらい離れた位置に「collider」を表示するか指定出来ます。
removeObject()で親オブジェクトを削除すると、「collider」のオブジェクトも自動的に削除されます。
isIntersect()」と「isCollision()」はこの「collider」で当たり判定を行います。

例えば、自機のクラスの「constructor」に下記の処理を追記します。

        collider = addObject
            image: 'collider8x8'
            x: @x
            y: @y
            width: 8
            height: 8
            animlist: [
                [100, [0]]
            ]   
        @collider = collider

すると自機の当たり判定は、自機に設定されているスプライトではなく、「@collider」に設定されているスプライト「collider8x8」で行なわれます。


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?