Обычный способ - определить скорость всего в единицах в секунду. Таким образом, игрок будет двигаться со скоростью 64 пикселя в секунду (или любой другой скоростью, которую вы выберете). Каждый кадр MonoGame вызывает Update
и передает экземпляр GameTime
с количеством времени, прошедшего с момента последнего кадра. То, что вы хотите сделать, - это умножить скорость передвижения на GameTime.ElapsedGameTime.TotalSeconds
. Так что, если 3/4 секунды прошло со времени последнего кадра, вы бы сделали 64 * .75
, чтобы получить 48
, то есть количество пикселей, которое должно перемещать ваш персонаж в этот кадр, если кнопка удерживается нажатой.
Если вы определяете все в терминах «Единицы в секунду», вы можете легко поддерживать скорость, независимо от того, насколько быстро или медленнее ваша частота кадров. Это работает для скорости движения (пикселы/метры в секунду), скорости вращения (в градусах в секунду), регенерации здоровья (л.с. в секунду) и т. Д. MonoGame упрощает это, потому что все основные классы блоков, такие как Vector2
и Vector3
, имеют свои операторы умножения, перегруженные именно для этой цели.
Хитрость заключается в том, чтобы не добавить задержки между итерациями цикла игры, но вместо того, чтобы измерять время между выполнением цикла и корректировать зависящее от времени значений (например, скорость/скорости, ускорение и т.д.) соответственно. – Dai