ホーム > タグ > 衝突
衝突
Box2d で降りしきる箱と戯れる箱
前回に続きまして、四角の一人四角遊びです(?)
画面をクリックした後、「←」「→」で左右移動、「s」キーでジャンプです。
前回同様、「s」キー連打で多段ジャンプ!
↓参考にさせていただきました。
■Box2Dサンプル maskBitsによる衝突フィルタリング
今回やりたかったのは、上からものを落として、
何回かぶつかったら、部屋から立ち去らせるということ。
具体的には、
3回、床との衝突を検知したら、
落ちてくる箱の衝突フィルタの値を変更するということをやりたかった。
箱を定義するときにIDを指定しておくことで、何と何が衝突したか検知できる。
ACTIONSCRIPT:
- var floorBodyDef:b2BodyDef = new b2BodyDef();
- // 床のIDを floor としておく
- floorBodyDef.userData = new Object;
- floorBodyDef.userData.id = "floor";
- floorBodyDef.position.Set(6, 8);
3回衝突を検知したら、maskBitsの値を0x00に変更して、誰とも衝突しないようにする。
Box2Dのソースから追って、filterを再度ゲットできるところを探したんだけど、
これでよかったんだろうか。
ACTIONSCRIPT:
- for (var ce:b2ContactEdge = floor.m_contactList; ce != null; ce = ce.next) {
- var obj1:b2Body = ce.contact.GetShape1().m_body;//1つ目のオブジェクト
- var obj2:b2Body = ce.contact.GetShape2().m_body;//2つ目のオブジェクト
- if(obj1.m_userData && obj2.m_userData && ce.contact.GetManifoldCount() == 1){
- if(obj2.m_userData.id == "dropbox"){
- if (obj2.m_userData.crash> 2){
- shape = obj2.GetShapeList();
- shape.m_filter.maskBits = 0x00;
- }else {
- obj2.m_userData.crash++;
- }
- }
- }
- }
だいぶ作りたいものに近づいてきました!
次はShapeで絵をちゃんと重ねよう!
↓ソース全部
- Comments: 1
- Trackbacks: 0
Home > Tags > 衝突


