Я делаю двухмерный сайд-скроллер, и хоть убей, я не могу прыгнуть на работу. Вот как я двигаюсь влево и вправо:
for(var i = 0; i < time; i++)
newVelocityX = (oldVelocityX + accelerationX) * frictionX;
затем, чтобы обновить позицию игрока, я делаю
positionX = старая позицияX + новая скоростьX;
Это прекрасно работает, и переменная «время» содержит количество мс, которое прошло с тех пор, как я в последний раз запускал функцию. Трение работает отлично, и я рад, что все хорошо в направлении X. Это то, что у меня есть в направлении Y:
for(var i = 0; i < time; i++) {
accelerationY += gravityAccelerationY;
newVelocityY = oldVelocityY + accelerationY;
}
Объект падает из-за гравитации просто отлично. Если я задаю отрицательное ускорение Y, когда пользователь нажимает стрелку вверх, то я даже могу заставить игрока прыгать, но на быстром компьютере он прыгает очень высоко, а на старом компьютере — очень низко. Я не уверен, как это исправить, я думал, что уже учитывал это, помещая его в цикл foor, как я это делал.