今回は、前回のエントリーまでで作った車のボディーと、前回説明は省いてたけど画面中央にいる障害物の衝突判定をメモ。
↓ここを参考にさせていただいた。
・Flash OOP Japan | 続Flah OOP本 | 物理エンジンを使ったゲーム | あたり判定
↓ここを参考にさせていただいた。
・Flash OOP Japan | 続Flah OOP本 | 物理エンジンを使ったゲーム | あたり判定
b2Bodyオブジェクトにはm_contactListという、衝突している2つのオブジェクトを格納するプロパティが存在する。
まずは、車のボディー(bodyBody)のm_contactListから、衝突しているオブジェクトを取り出す処理を入れる。(m_contactListを取得するにはGetContactList()を使用する)
衝突するオブジェクトは、地面であったり壁であったりと場合により変わるので、それを判断する指標が必要になってくる。
その指標を、b2PolygonDefやb2CircleDefで指定したグラフィックデータ(userData)のプロパティ「id」として設定する。(ここでは車のボディには「body」、障害物には「obstacle」というidを指定)
で、上の方で取得したm_contactList内のオブジェクト、「obj1」と「obj2」のuserDataのidがそれぞれ、「body」と「obstacle」だったら衝突時のアクションを起こすという流れになる。
あとここでつまづいたのが、「idだけで判定しようとするとオブジェクトの矩形で判定をしてしまう」ということ。
ここでb2ContanctのGetManifoldCount()を調べる。
GetManifoldCount()は「0」か「1」の数字が取得できて、「"0"の時は矩形で衝突している」、「"1"の時はオブジェクトの形で衝突している」事を表しているみたい。
↓それをコードに組み込むとこんな感じ。
↓今回は衝突時に右上のボックスが「TRUE」、非衝突時が「FLASE」の文字を表示する様にしてみた。
・ソース
とりあえず今回までの事が理解出来れば簡単なゲームは作れそうな気がする。
でも、まだ探ってない部分が沢山あるから、まだまだ勉強しなくては。
まずは、車のボディー(bodyBody)のm_contactListから、衝突しているオブジェクトを取り出す処理を入れる。(m_contactListを取得するにはGetContactList()を使用する)
衝突するオブジェクトは、地面であったり壁であったりと場合により変わるので、それを判断する指標が必要になってくる。
その指標を、b2PolygonDefやb2CircleDefで指定したグラフィックデータ(userData)のプロパティ「id」として設定する。(ここでは車のボディには「body」、障害物には「obstacle」というidを指定)
で、上の方で取得したm_contactList内のオブジェクト、「obj1」と「obj2」のuserDataのidがそれぞれ、「body」と「obstacle」だったら衝突時のアクションを起こすという流れになる。
あとここでつまづいたのが、「idだけで判定しようとするとオブジェクトの矩形で判定をしてしまう」ということ。
ここでb2ContanctのGetManifoldCount()を調べる。
GetManifoldCount()は「0」か「1」の数字が取得できて、「"0"の時は矩形で衝突している」、「"1"の時はオブジェクトの形で衝突している」事を表しているみたい。
↓それをコードに組み込むとこんな感じ。
↓今回は衝突時に右上のボックスが「TRUE」、非衝突時が「FLASE」の文字を表示する様にしてみた。
This site requires flash player 9 or later.Thank you.
・ソース
とりあえず今回までの事が理解出来れば簡単なゲームは作れそうな気がする。
でも、まだ探ってない部分が沢山あるから、まだまだ勉強しなくては。



leave comment