Прыжки в игре
Я делаю 2-х сторонний скроллер, и я не могу прыгнуть на работу. Вот как я двигаюсь влево и вправо:
for(var i = 0; i < time; i++)
newVelocityX = (oldVelocityX + accelerationX) * frictionX;
затем обновить позицию игрока, я делаю
positionX = oldPositionX + newVelocityX;
Это прекрасно работает, и переменная "time" просто имеет количество мс, которое было с тех пор, как я последний раз запускал функцию. Трение прекрасно работает, и я рад, что все хорошо в направлении X. Вот что я имею в направлении Y:
for(var i = 0; i < time; i++) {
accelerationY += gravityAccelerationY;
newVelocityY = oldVelocityY + accelerationY;
}
Объект падает из-за силы тяжести просто отлично. Если я установлю отрицательное ускорение Y, когда пользователь нажимает стрелку вверх, я могу даже заставить игрока прыгать, но на быстром компьютере они прыгают очень высоко, а на старом компьютере они прыгают очень низко. Я не уверен, как это исправить, я думал, что уже учел это, поместив это в цикл foor, как я сделал.
1 ответ
Вам нужно будет сделать несколько вещей, чтобы ваш код работал правильно. В коде, который вы разместили, есть множество ошибок / падений производительности.
Вот некоторый код, чтобы сделать основы игры.
Пример кода для прыжков:
if (jump) {
velocityY = -jumpHeightSquared; // assuming positive Y is downward, and you are jumping upward
}
velocityY += gravityAccelerationY * time;
positionY += velocityY * time;
if (positionY > 0) {
positionY = 0; // assuming the ground is at height 0
velocityY = 0;
}
Пример кода для перемещения в сторону:
velocityX += accelerationX * time;
velocityX *= Math.pow(frictionX, time);
positionX += velocityX * time;
Некоторые комментарии к коду:
Переменные скорости и положения должны сохранять свои значения между кадрами (я предполагаю, что вы поняли это).
gravityAccelerationY и frictionX являются постоянными значениями, если только гравитация или трение не изменятся.
Где я заменил твои петли * time
Использование одного умножения будет быстрее, чем цикл. Единственная разница будет в низкой частоте кадров или высоких скоростях ускорения, когда ускорение будет казаться "ускоренным" по сравнению с тем, каким оно должно быть. У вас не должно быть проблем с этим, хотя.