В настоящее время я делаю игру на C #, используя Direct X 9.0. Римейк игры Donkey Kong NES. Я почти все закончил, но у меня проблемы с физикой прыжка Марио. У меня есть переменные, объявленные для координат Y и X.
Мне было интересно, если бы был простой способ сделать это. Я искал ответ "высоко" и "низко", но ответы, которые я нашел, либо не имеют отношения к делу, либо используют другой язык программирования, например XNA.
В настоящее время у меня установлена переменная bool, чтобы проверить, была ли нажата кнопка W, и это вызовет любой код, который заставит его прыгнуть. Я возился, например.
if (jump == true)
{
Playerypos -= vel;
Playerxpos += vel;
}
Который не работал так хорошо. Я искал ответ все выше и ниже, и теперь я в отчаянии, если кто-то может указать мне правильное направление на простое решение. Это было бы прекрасно. Очень ценю за любые ответы.
Ответы:
Прежде всего, XNA также использует C #, так что это тот же язык программирования. И хотя базовый API может иметь некоторые отличия от DirectX, это не имеет никакого отношения к прыжкам, поэтому здесь должны применяться те же учебники или ответы. Кроме того, существует множество способов реализовать это в зависимости от множества факторов. То, что я опишу ниже, является лишь одной из возможностей.
Основные физические требования
Для начала вам понадобятся базовые физические переменные и расчеты в цикле обновления. В частности, вам нужно определить положение, скорость и гравитацию, и ваш цикл обновления должен делать что-то похожее на это (обнаружение столкновений и реакция для простоты опущены):
Фиксированный прыжок в высоту
Теперь самый простой способ осуществить прыжок, который всегда имеет одинаковую высоту, независимо от того, как долго вы нажимаете клавишу, - это просто изменить вертикальную скорость один раз. Это заставит персонажа начать расти, а гравитация автоматически позаботится о его падении:
Важно ! Вы не хотите иметь возможность начать прыжок, если ваш персонаж не находится на земле, поэтому вам нужно добавить проверку для этого.
Переменная высота прыжка
Но игры, такие как Mario и Sonic, имеют переменный прыжок, где высота прыжка зависит от того, как долго вы нажимаете кнопку. В этом случае вам нужно обрабатывать нажатие и отпускание клавиши перехода. Вы можете добавить что-то вроде:
Подстройка всех этих значений (то есть числа , как
0.5
,-12.0f
или-6.0f
) в коде выше вы можете изменить вид вашего прыжка, как высоко он подскакивает, сколько импульса он держит даже после отпускания кнопки прыжка, как быстро он падает, и т.д. ,Важно Не вызывайте эти функции каждый кадр. Вызывайте их только один раз, когда клавиша нажата или отпущена. В противном случае ваш персонаж будет летать вместо прыжка.
Рабочий пример
Я только что создал краткий пример техник, описанных выше, которые вы можете попробовать в своем браузере здесь (нажмите кнопку мыши, чтобы прыгать, отпустите ее на полпути, чтобы контролировать высоту прыжка). Это в JS, но, как я упоминал ранее, язык в данном случае не имеет значения.
http://jsfiddle.net/LyM87/
источник
Как в физике. Только в тот момент, когда вы нажимаете,
jump key
и персонаж на земле прибавляет скорость вверх (это называется импульсом), но заставляет персонажа падать под действием силы тяжести все время.Если Вы не хотите, чтобы персонаж прыгал каждый раз, когда он ударяется о землю - потому что Вы держите
jump key
- добавьтеjump key is being pressed
переменную, которую Вы очищаете послеjump key
, отпускается и устанавливается после. псевдокод:Если бы я использовал Твой путь:
Как
donkey.y
изменится, зависит от вашего воображения. Скорость должна становиться меньше. Осел в воздухе, чтобы он выглядел хорошо.источник