当たり判定を理解しよう。当たり判定を理解しよう。当たり判定はゲームをする上で欠かせないもの。アクションゲームでは的キャラクターと自分のキャラクターが衝突するとダメージを受けたりゲームオーバーになりますね。この時、衝突の有無を判定することを「当たり判定」と呼びます。当たり判定の実装まずは、実践ということで、衝突させるプログラムを書いてみましょう。衝突を判定する処理がないので、そのまますれ違っていきますね。プログラムは次の通りです。Kuma();};game.start();};前回、前々回と実施している内容は同じですね。クマ(男)とクマ(女)のコンストラクタを作成してゲームに出現させています。次は実際に判定を入れてクマ(男)がクマ(女)とぶつかったときに止まるようにします。intersect関数キャラクタの衝突はintersect関数で実現することができます。衝突=キャラクターの画像が重なっているときとして判断します。ここで注意するべきことは、画像フレームのサイズがその画像のサイズとなるので、色が乗っていない透明な部分も「衝突」の範囲と見なされます。先ほどのすれ違うプログラムを改修して衝突の判定を入れたものが次のプログラムです。短形判定ちょっとわかりにくいのですが、クマ(女)とクマ(男)が接触する際に少し停止しますね。この接触については違和感を感じると思います。接触する前からクマ(男)が停止してしまうのです。これは画像(スプライト)が32×32で指定されているのに対してクマの画像の横幅が32未満のためです。画像のない部分は透明になっているので少し手前から停止することになります。これでは、ゲームバランスに支障がでてしまいます。見える画像と衝突検出可能な範囲は揃えるべきです。そのため、実際の画像サイズに合わせた透明なダミースプライトを作成してダミースプライトに判定をさせる手法もあります。ダミースプライトによる判定追加ソース次の通りです。Dummy_sprite(288,14,kuma_girl);};game.start();};ダミーのスプライトを作成するDummy_spriteコンストラクタを追加してクマの画像とほぼ同じ大きさのスプライトを作成し、そのスプライトがクマの動きに追従するようにしています。他の衝突を判定する方法としてwithin関数を利用することができます。先ほどのintersect関数との違いはwidthinはキャラクタの中心からの距離が指定した距離より小さい場合は「衝突」とみなします。今回の場合はクマ(男)とクマ(女)のちゅ新距離がクマの幅の半分なのでクマ男とクマ女の中心距離が16px以内になった場合に衝突(true)とみなします。中心からの距離による判定になるので、円の範囲で衝突を検知します。withinによる判定追加プログラムは次の通りです。Kuma_girl(288,144);};game.start();};20から26行目の部分が当たり判定の処理を実施している部分です。if文の条件にあるwithinというのが「衝突」を判定しています。衝突したと判断されたときはif文内の処理が実施されます。if文の中をわかりやすくかくと次のようになります。当たり判定ここまで//=======================条件が一致する場合(衝突)はif文内の処理が行われるのでクマ(男)のx座標を現在値に入れるのでその場で停止します。クマ(女)は停止しないので通過していきます。接触がなくなるとelse文に入りクマ(男)も動き出すという処理になります。それではクマ(女)にも当たり判定を入れてみましょう。判定追加(クマ女)クマ同士が接触すると無事止まるようになりましたね。ソースは次のようになります。Kuma_girl(288,144);};game.start();};次のプログラムを修正してクマとドクロがぶつかったときにゲームオーバーにしてください。課題雛形サンプルダミースプライトを使った衝突判定について、サンプルを書き換えてクマ(女)もクマ(男)と接触した場合にストップするようにしてください。タイムラインでキャラクタを動かしてみよう。タイムラインでキャラクタを動かしてみよう。コメントをキャンセルメールアドレスが公開されることはありません。付いている欄は必須項目です次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。','もうすぐ満員です。,'もうすぐ満員です。