我使用box2dweb。我正在尝试开发游戏。在某些时候,我需要找出“圆圈”和“盒子”之间的接触点。我所知道的是它可以使用 b2ContactListener 来完成。我们可以通过使用 Post-Solve Event 实现 b2ContactListener 来接收联系人数据。请帮忙!
问问题
3611 次
1 回答
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 代码,并根据您需要做的事情挂钩到适当的事件。
Seth ladd 在他的博客上有一些关于碰撞/反应的很棒的文章。这是我捡起这些东西的地方,所以他的功劳归于他。
我希望这有帮助。
谢谢,加里
于 2012-06-08T23:40:31.467 回答