Похоже, эта строка ошибочна:
this.position.Y -= (float)(30.0 + ((1.2) * elapsedAirTime)*elapsedAirTime);
Я думаю, вы обнаружите, что это обновляет позицию спрайтов быстрее, чем вы думаете, спрайт переместится на 330 пикселей вверх по экрану за 10 обновлений (при условии Game.IsFixedTimeStep == true
), что составляет одну десятую секунды в реальном времени
Вполне вероятно, что это просто обновляется настолько быстро, что вы не получите изменения, чтобы увидеть его повышение до того, как условие && position.Y < 3
вступит в силу иизменяет playerState.
Похоже, вы пытаетесь сказать - прыгайте со скоростью x пикселей в секунду в течение до 8,5 секунд, пока остается место.
Для этого вам нужно изменить расчет на this.position.y -= (float) (30 * gameTime.ElapsedGameTime.TotalSeconds)
, это придаст движению прыжка очень линейный характер, но это будет означать, что спрайт прыгает ровно 30 пикселей в секунду.
Если Game.IsFixedTimeStep == true
- по умолчанию - обновление вызывается 60 раз в секунду, так что gameTime.ElapsedGameTime.TotalSeconds будет составлять около 0,1 при каждом обновлении.Если что-то приводит к пропуску обновления (например, проблемы с рендерингом), обновление будет отложено, а gameTime.ElapsedGameTime.TotalSeconds может быть равно 0,3 (пропущено 2 обновления), но формула по-прежнему работает с правильной скоростью перехода.