我正在尝试移动身体:
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/