C#XNA Box2d:ApplyImpulse()行为令人惊讶

时间:2010-02-13 20:25:18

标签: c# xna physics box2d

我正试图移动身体:

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

奇怪的是,只有在释放键时,身体才会移动。为什么是这样?我一直在关注manual,但无法理解。

当我删除条件时,只需在applyImpulse()中进行Step()调用,火箭就会不断拥有推进器的动画但从未实际移动过。 (就像我一直按住向上键一样。)

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

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

载体中两个值的意义是什么?

更新这效果更好:

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

如果力矢量中的第二个值为负,则对象在屏幕上升起。之前,所施加的冲动只是把它撞到了地板上。当我释放钥匙时,如果冲动足够强大,它有时会反弹。

2 个答案:

答案 0 :(得分:1)

关于您的更新:在XNA中,根据您对相机的位置,负Y会亮起。如果你想要火箭上升,你必须在那个方向施加一个力。

答案 1 :(得分:0)

对于为什么它只在它被释放时才移动是没有意义的,在其他地方没有其他任何干扰它的地方,例如隐藏在某个地方的另一个键盘输入?我只是问,因为它可能是另一个键盘输入语句与另一个键盘输入语句冲突并导致问题。