我使用的是box2dweb,正在开发一款游戏。在某个时刻,我需要找到“圆形”和“矩形”之间的接触点。我知道可以使用b2ContactListener来实现。我们可以通过实现b2ContactListener并使用Post-Solve事件来接收接触数据。请帮忙!
我使用的是box2dweb,正在开发一款游戏。在某个时刻,我需要找到“圆形”和“矩形”之间的接触点。我知道可以使用b2ContactListener来实现。我们可以通过实现b2ContactListener并使用Post-Solve事件来接收接触数据。请帮忙!
你已走上正确的轨道,有各种事件可以与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在他的博客中有一些关于碰撞/对其做出反应的很棒的文章。这就是我学到这些东西的地方,完全归功于他。
希望这可以帮助你。
谢谢, Gary
BeginContact
和EndContact
函数为空,我的脚本会抛出错误并且没有任何渲染。我想要做的就是当物体接触地面时更改其线性阻尼,并在空中时将其恢复为正常值。 - powerbuoy