2012-06-04 31 views
8

我使用box2dweb。我正在嘗試開發一款遊戲。在某些時候,我需要找出「圓圈」和「箱子」之間的接觸點。我所知道的是可以使用b2ContactListener來完成。我們可以通過使用Post-Solve Event實現b2ContactListener來接收聯繫人數據。請幫忙!Box2dweb - 碰撞接觸點

+1

這可能幫助:http://www.iforce2d.net/b2dtut/collision-anatomy – iforce2d

回答

16

你是在正確的軌道上還有你可以連接各種事件與b2ContactListener:

var b2Listener = Box2D.Dynamics.b2ContactListener; 

//Add listeners for contact 
var listener = new b2Listener; 

listener.BeginContact = function(contact) { 
    //console.log(contact.GetFixtureA().GetBody().GetUserData()); 
} 

listener.EndContact = function(contact) { 
    // console.log(contact.GetFixtureA().GetBody().GetUserData()); 
} 

listener.PostSolve = function(contact, impulse) { 
    if (contact.GetFixtureA().GetBody().GetUserData() == 'ball' || contact.GetFixtureB().GetBody().GetUserData() == 'ball') { 
     var impulse = impulse.normalImpulses[0]; 
     if (impulse < 0.2) return; //threshold ignore small impacts 
     world.ball.impulse = impulse > 0.6 ? 0.5 : impulse; 
     console.log(world.ball.impulse); 
    } 
} 

listener.PreSolve = function(contact, oldManifold) { 
    // PreSolve 
} 

this.world.SetContactListener(listener); 

只需卸下postSolve代碼,並根據你需要做勾成相應的事件是什麼。

塞特拉德在他的博客上有一些關於碰撞/對他們作出反應的偉大文章。這就是我拿起這些東西的地方,所以全力讚揚他。

我希望這會有所幫助。

感謝, 加里

+0

感謝的人。我現在也可以得到確切的聯絡點。 – Shekhar

+0

我寫了一篇博客。如果你想要,你可以檢查出來。 http://thenightowl.xp3.biz/ – Shekhar

+0

最後! CollisionHandler在Javscript中的解釋 –