Прежде всего, XNA также использует C #, так что это тот же язык программирования. И хотя базовый API может иметь некоторые отличия от DirectX, это не имеет никакого отношения к прыжкам, поэтому здесь должны применяться те же учебники или ответы. Кроме того, существует множество способов реализовать это в зависимости от множества факторов. То, что я опишу ниже, является лишь одной из возможностей.
Основные физические требования
Для начала вам понадобятся базовые физические переменные и расчеты в цикле обновления. В частности, вам нужно определить положение, скорость и гравитацию, и ваш цикл обновления должен делать что-то похожее на это (обнаружение столкновений и реакция для простоты опущены):
float positionX, positionY; // Position of the character
float velocityX, velocityY; // Velocity of the character
float gravity = 0.5f; // How strong is gravity
void Update(float time)
{
positionX += velocityX * time; // Apply horizontal velocity to X position
positionY += velocityY * time; // Apply vertical velocity to X position
velocityY += gravity * time; // Apply gravity to vertical velocity
}
Фиксированный прыжок в высоту
Теперь самый простой способ осуществить прыжок, который всегда имеет одинаковую высоту, независимо от того, как долго вы нажимаете клавишу, - это просто изменить вертикальную скорость один раз. Это заставит персонажа начать расти, а гравитация автоматически позаботится о его падении:
void OnJumpKeyPressed()
{
velocityY = -12.0f; // Give a vertical boost to the players velocity to start jump
}
Важно ! Вы не хотите иметь возможность начать прыжок, если ваш персонаж не находится на земле, поэтому вам нужно добавить проверку для этого.
Переменная высота прыжка
Но игры, такие как Mario и Sonic, имеют переменный прыжок, где высота прыжка зависит от того, как долго вы нажимаете кнопку. В этом случае вам нужно обрабатывать нажатие и отпускание клавиши перехода. Вы можете добавить что-то вроде:
void OnJumpKeyReleased()
{
if(velocityY < -6.0f) // If character is still ascending in the jump
velocityY = -6.0f; // Limit the speed of ascent
}
Подстройка всех этих значений (то есть числа , как 0.5
, -12.0f
или -6.0f
) в коде выше вы можете изменить вид вашего прыжка, как высоко он подскакивает, сколько импульса он держит даже после отпускания кнопки прыжка, как быстро он падает, и т.д. ,
Важно Не вызывайте эти функции каждый кадр. Вызывайте их только один раз, когда клавиша нажата или отпущена. В противном случае ваш персонаж будет летать вместо прыжка.
Рабочий пример
Я только что создал краткий пример техник, описанных выше, которые вы можете попробовать в своем браузере здесь (нажмите кнопку мыши, чтобы прыгать, отпустите ее на полпути, чтобы контролировать высоту прыжка). Это в JS, но, как я упоминал ранее, язык в данном случае не имеет значения.
http://jsfiddle.net/LyM87/