Actionscript 3 为什么这会在box2d中产生反弹?

Actionscript 3 为什么这会在box2d中产生反弹?,actionscript-3,box2d,Actionscript 3,Box2d,我试图让我的box2d盒在撞击另一个box2d盒时反弹。两个对象的物理特性都是这样设置的 fixtureDef.density=1; fixtureDef.friction=0; fixtureDef.restitution=0.9; 当我应用这条线(这是做事情的正确方式)时,我没有反弹 myElementsArray[0].myPhysics.myBody.ApplyImpulse(newVec, myElementsArray[0].myPh

我试图让我的box2d盒在撞击另一个box2d盒时反弹。两个对象的物理特性都是这样设置的

fixtureDef.density=1;
            fixtureDef.friction=0;
            fixtureDef.restitution=0.9;
当我应用这条线(这是做事情的正确方式)时,我没有反弹

myElementsArray[0].myPhysics.myBody.ApplyImpulse(newVec, myElementsArray[0].myPhysics.myBody.GetWorldCenter());
但当我把第二部分改成随机向量时,它会反弹

myElementsArray[0].myPhysics.myBody.ApplyImpulse(newVec, new b2Vec2(20,20));
我不明白,我做错了什么?

你看到的“反弹”可能有点欺骗性。我不是一个物理大师,我只知道足够危险,因为我主要关注的是游戏编程。不管怎么说,第一个语句使用质心来施加力。当您使用恢复计算“反弹”时,在大多数物理库中,它将非常简单地获取两个碰撞对象之间的最大恢复:

restitution = Max( bodyA.restitution, bodyB.restitution )
然后忽略扭矩,关于恢复的新微分最终速度为:

–restitution * (bodyA.initialVelocity - bodyB.initialVelocity)
这也更标准地写为:

-e(V1i-V2i)


为什么这很重要?因为这可能是你没有看到反弹的原因,所以两个初始速度(没有扭矩)正在归零。现在,对
ApplyImpulse()
的第二次调用使用的坐标不是身体的质心。因此,Box2D将尝试对物体应用角速度。考虑到这一点,将使用一系列新的方程式。我很有信心这就是问题所在,但其他人可能会纠正我或了解更多。

谢谢你的回答。那我怎么才能让它反弹呢!:)就我所知,我不知道为什么它会变成零。试着玩两个物体的恢复和密度。试过了,没有效果。