Вам нужно будет сделать несколько вещей, чтобы изменить ваш код для правильной работы.В коде, который вы опубликовали, есть множество ошибок / проблем с производительностью.
Вот некоторый код для основ игры.
Пример кода для прыжков:
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 являются постоянными значениями, если не изменяется гравитация или трение.
Где я заменил ваши циклы for на * time
, использование одного умножения будет быстрее, чемцикл.Единственная разница будет в низкой частоте кадров или высоких скоростях ускорения, когда ускорение будет казаться «ускоренным» по сравнению с тем, каким оно должно быть.Но с этим проблем быть не должно.