Ваша формула для применения гравитации неверна.Помните, что F=m.a
, v=v_0+ a*t
, x=x_0 +v_0*t + 0.5*a*t^2
.Но обычный подход заключается в использовании метода Эйлера для численного интегрирования:
gravity=9.81;
velocity+=gravity*deltaT;
position+=velocity*deltaT;
В вашем коде это будет выглядеть так:
playerVelX *= friction;
playerVelY -= gravity;//If Y point up, so gravity acts against that.
playerX += playerVelX;
playerY += playerVelY;
Если вы хотите иметь детерминистическое и стабильное моделирование (котороевы должны) тогда вам нужно иметь deltaTime
- сколько времени прошло с момента последнего обновления.Смотрите эту отличную статью Исправьте свой Timstep! .Кроме того, приведенный выше код постоянно применяет гравитацию, даже когда не прыгает, так что имейте это в виду.