2011-04-12 96 views
0

我正在監聽動態物體之間的接觸。但不能監聽動態和靜態物體之間的接觸。box2d,如何檢測靜態和動態物體之間的碰撞

我可以用這個metod來處理我的b2contactListener類的碰撞檢測。

public override function BeginContact(contact:b2Contact):void { 
     // getting the fixtures that collided 
     var fixtureA:b2Fixture=contact.GetFixtureA(); 
     var fixtureB:b2Fixture=contact.GetFixtureB(); 
     // if the fixture is a sensor, mark the parent body to be removed 

     if(fixtureB.GetBody().getUniqueBodyName() == "towerBody"){ 
      //Towerbody is static body 
        trace("BINGOOOOOO"); 
        } 

     if (fixtureA.GetBody().getUniqueBodyName() == "bomb"){ 
      // Bomb is dynamic body 
     // main.gamePhysics.destroyBodyWhenCollide(fixtureA.GetBody()); 

      var spr:Sprite = fixtureA.GetBody().GetUserData(); 
      spr.alpha = 0; 
      fixtureA.GetBody().collisionDetected = true;    

     } 

PLZ幫我...

回答

2

這不是一個有效的假設,靜態身體會fixtureB ......它可能是fixtureA。

嘗試測試了這一點...

public override function BeginContact(contact:b2Contact):void { 
    // getting the fixtures that collided 
    var fixtureA:b2Fixture=contact.GetFixtureA(); 
    var fixtureB:b2Fixture=contact.GetFixtureB(); 
    // if the fixture is a sensor, mark the parent body to be removed 

    if(fixtureA.GetBody().getUniqueBodyName() == "towerBody"){ 
     //Towerbody is static body 
       trace("BINGOOOOOO - A"); 
       } 

    if(fixtureB.GetBody().getUniqueBodyName() == "towerBody"){ 
     //Towerbody is static body 
       trace("BINGOOOOOO - B"); 
       } 


    if (fixtureA.GetBody().getUniqueBodyName() == "bomb"){ 
     // Bomb is dynamic body 
    // main.gamePhysics.destroyBodyWhenCollide(fixtureA.GetBody()); 

     var spr:Sprite = fixtureA.GetBody().GetUserData(); 
     spr.alpha = 0; 
     fixtureA.GetBody().collisionDetected = true;    

    } 
+0

Thnks它的作品,我解決問題 – cagryInside 2011-04-12 23:22:44