You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
В Asteroids vs You скорость отрисовки разная в зависимости от размера окна (на полный экран и играть легче). Как организовать перемещение объектов по времени? (с пропуском кадров или задержкой)
The text was updated successfully, but these errors were encountered:
Значение параметров, которые попадают в юниты у меня рассчитываются так:
function MonitorScale: Single;
begin
Result := ((uEasyDevice.getDisplaySizeInPx.X + uEasyDevice.getDisplaySizeInPx.Y) * 0.5)
* 0.001;
end;
function SpeedModScale: Single;
begin
Result := (((uEasyDevice.getDisplaySizeInPx.X + uEasyDevice.getDisplaySizeInPx.Y) * 0.5)
* 0.001) / getScreenScale;
end;
Т.е. действительно от разрешения экрана зависит скорость. Можно поменять формулу, например, чтобы модификаторы рассчитывались как отношение какого-то разрешения к текущему, плюс думать о FPS: в TEngine2DStatus есть property EngineSpeed: Single, которое позволяет рассчитать свои коэффициенты. У меня тоже используется это.
У смартфонов очень разные разрешения экранов, поэтому нужно придумать что-то еще, для обеспечения одинаковой сложности на всех разрешениях. Например использовать свою непиксельную сетку и сделать какой-то механизм для отрисовки объектов этой сетки на любом разрешении. Но это всё зависит от механики игры, решения могут быть абсолютно разные.
А если хочется сделать изменение положения по времени, не думая о пикселях, то для этого есть анимации. TAnimation в юните uEngine2DAnimation. От них наследуется своя анимация, у которой переписывается метод Animate таким образом, чтобы он менял нужный параметр. Анимации перемещения есть уже реализованные в юните uStandardAnimation2d и в нём TMigrationAnimation, TMouseDownMigrationAnimation, TSpriteAnimation. Например, задаётся конечное положение в пикселях, требуемый масштаб и время, за которое объект должен прийти в это положение в миллисекундах, пример есть в uDemoGameLoader и там есть подобные методы TLoader.ScaleAnimation и т.д.
В Asteroids vs You скорость отрисовки разная в зависимости от размера окна (на полный экран и играть легче). Как организовать перемещение объектов по времени? (с пропуском кадров или задержкой)
The text was updated successfully, but these errors were encountered: