Перш за все, 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
}
Важливо Ви не хочете мати можливість розпочати стрибок, якщо ваш персонаж не на землі, тому вам потрібно буде додати чек.
Перемінний перехід по висоті
Але такі ігри, як Маріо та Сонік, мають змінний стрибок, де висота стрибка залежить від того, як довго ви натискаєте кнопку вниз. У цьому випадку вам потрібно впоратися як натисканням, так і відпусканням клавіші стрибка. Ви можете додати щось на кшталт:
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/