Я пытаюсь понять концепцию скорости в игре, которая поддерживает различные размеры экрана (в android).Скорость Sprite на разных размерах экрана
Предположим, у меня есть спрайт, который должен пройти 10 секунд от правого конца в ландшафтном режиме до левого конца. Частота кадров нестабильна, поэтому иногда ей 30, а затем она внезапно меняется на 10. Но я все еще хочу, чтобы мой спрайт забирал 10 секунд с одного конца на другой. Как мне это сделать?
final int time = 10; //time from one end to the otehr
float baseSpeedX = screenWidth/time;
float currentFrameRate = 30.0; //just as an example
float baseFrameRate = 50.0; //the frame rate we want
float factor = baseFrameRate/currentFrameRate;
playerSpeedX += baseSpeedX * factor;
Это то, что я понял:
Вы получаете базовой скорости путем деления ширины экрана по времени вы хотите получить спрайт от одного конца до другого. Базовая скорость - это скорость, с которой ваш спрайт должен добавить ваше текущее местоположение каждую секунду, если имеется постоянная частота кадров. Тем не менее, я не знаю, как добиться этого, поэтому я просто получаю текущую частоту кадров и делят базовую частоту кадров , частоту кадров, которую мы действительно хотим для нашей игры, чтобы получить коэффициент, который мы умножаем на нашу базовую скорость с.
Это будет, если это действительно работает, заставить Sprite достичь другого конца через 10 секунд, верно? Даже если у нас есть частота кадров 10 в течение 2 секунд, а затем 50 после этого в течение 8 секунд. Чем выше частота кадров теперь, тем ниже Sprite увеличивается на расстояние и чем ниже частота кадров, тем выше Sprite увеличивается на расстоянии.
Если это все работает, это было бы чем-то, что я мог бы использовать в игре? Или это совершенно неправильный подход для получения спрайта?
«* Частота смены кадров не является устойчивой, так иногда это 30 на некоторое время, а затем внезапно оно меняется на 10. Но я все еще хочу, чтобы мой спрайт забирал 10 секунд с одного конца на другой * «Кажется, что вы должны пытаться стабилизировать частоту кадров, а не заставите вас изменить свою игру. Управляйте своим приложением; не позволяйте ему контролировать вас. Частота кадров должна быть независимой от реальной игры; если частота кадров низкая, и игра вызывает ее, то это то, что вы должны исправить. Помимо этого, это их компьютер, на который у вас нет контроля. –
@VinceEmigh Я думаю, что у моего GameLoop есть стабилизированная частота кадров. Около 30 кадров в секунду. Однако это не всегда так.Иногда прогресс фона или что-то вроде прерываний немного, а fps уменьшается. Если вы понимаете, о чем я? Для таких случаев (от 30 до 10 секунд на некоторое время) я хочу убедиться, что спрайт все еще перемещается на всех устройствах одинаково. Несмотря на то, что размер экрана намного выше или ниже на других устройствах. – Davlog
И это «* это их компьютер, на который у вас нет контроля над». Вы * можете * реализовать такую систему, но это ОЧЕНЬ плохая практика. Вместо этого вы должны установить рекомендацию для игры в игру. Игры отстают, вот как все идет. Если вы попытаетесь настроить свою игру на * актуальную * частоту кадров, вы обнаружите, что делаете больше обработки (и тратите больше времени на фрейм), чем считали вы. Существует много игровых циклов, которые проверяют определенные несоответствия в времени рендеринга/обновления. Либо тестовый компьютер имеет плохие спецификации, либо игровой цикл нуждается в работе –