ここでは、「game01」というディレクトリ内で作業しているという前提で説明しています。
スプライトの当たり判定について
ゲームなどでキャラクター同士の当たり判定を取ることは多用されます。
当たり判定は、通常はスプライト表示で使っている画像の矩形で判定されます。
しかし、これでは絵の大きさがそのままゲームの難易度になってしまい、ゲームバランスの取り方が難しくなってしまいます。
enforceでは生成されたオブジェクトの当たり判定は、指定された画像の大きさ(width, height)で取りますが、メンバー変数の
collider
にオブジェクトを設定すると、設定されたオブジェクトのスプライトサイズで当たり判定が取られます。
通常のクマですと、32x32で衝突判定が取られますが8x8の画像を使ったオブジェクトを生成し、それをcolliderに設定すると当たり判定はその8x8のスプライトと取られるので難易度が低くなります(逆に高くなる場合もあります)。
「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」で行なわれます。