我正在尝试移动身体:

if (ks.IsKeyDown(Keys.Up)) {
    rocket.ApplyImpulse(new Box2DX.Common.Vec2(0, 30f), rocket.GetPosition());
}


奇怪的是,只有释放钥匙时身体才会移动。为什么是这样?我一直在查看manual,但无法弄清楚。

当我删除条件时,仅在applyImpulse()中调用Step()时,火箭就会不断具有推进器的动画效果,但从未真正移动。 (好像我一直在按住Up键一样。)

看起来我真正需要做的是更好地了解applyImpulse()的第一个参数的作用:

new Box2DX.Common.Vec2(0, 30f)


向量中两个值的意义是什么?

UPDATE效果更好:

rocket.ApplyImpulse(new Box2DX.Common.Vec2(0, -1), rocket.GetPosition());


看起来如果力矢量中的第二个值为负,则对象在屏幕上上升。以前,施加的冲动只是将其撞在地板上。当我松开琴键时,如果脉冲足够强,它有时会反弹。

最佳答案

关于更新:在XNA中,取决于相机的放置方式,负Y向上。如果要让火箭上升,则必须朝该方向施加力。

关于c# - C#XNA Box2d:ApplyImpulse()的行为令人惊讶,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2258911/

10-09 19:31