C # XNA Box2d: ApplyImpulse () действует неожиданно - PullRequest
2 голосов
/ 13 февраля 2010

Я пытаюсь переместить тело:

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

Как ни странно, тело двигается только тогда, когда клавиша отпущена . Почему это? Я смотрел на руководство , но не могу понять.

Когда я удаляю условное выражение и просто вызываю applyImpulse() в Step(), ракета постоянно имеет анимацию движителей, но фактически никогда не движется. (Как будто я все время удерживал клавишу «Вверх».)

Похоже, что мне действительно нужно, чтобы эта работа лучше понимала, что делает первый аргумент applyImpulse():

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

Какое значение имеют два значения в векторе?

ОБНОВЛЕНИЕ Это работает намного лучше:

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

Похоже, если второе значение в векторе силы отрицательно, объект поднимается на экран. Раньше применяемый импульс просто ударял его об пол. Когда я отпускал ключ, он иногда приходил в норму, если бы импульс был достаточно сильным.

Ответы [ 2 ]

1 голос
/ 15 февраля 2010

Относительно вашего обновления: в XNA, в зависимости от того, как вы расположили камеру, отрицательный Y увеличивается. Если вы хотите, чтобы ракета пошла вверх, вы должны применить силу в этом направлении.

0 голосов
/ 14 февраля 2010

Нет никакого смысла в том, почему он движется только тогда, когда он выпущен, неужели нет ничего другого, мешающего ему где-либо еще, например, другой скрытый ввод с клавиатуры? Я только спрашиваю, как может быть, что другой оператор ввода с клавиатуры конфликтует с другим и вызывает проблему.

...