2013-04-26 2 views
1

Я начинаю с PyGame. Прибывая с (некоторым) знанием Единства, я использую для умножения своих сумм движения на Time.timeDelta, который нормализует скорость движения. Однако, если я делаю это:Обеспечение постоянной скорости анимации независимо от FPS в PyGame

delta = clock.tick(x) 
circle.move(delta) 
pygame.display.flip() 

Если я время, как долго он принимает круг, чтобы добраться до места назначения, я буду получать противоречивые результаты для разных значений х. при 10 FPS он занимает примерно 5,75 секунды, тогда как при 60 - более 8 секунд.

Как я могу обеспечить свою скорость движения и получить хорошую дельта?

+3

Умножить движения и анимации на сколько времени прошло с момента последнего кадра, и убедитесь, что таймер достаточно точным, чтобы сделать его осмысленным, чтобы сделать это (Pygame должен быть один, который достаточно хорошо) HTTP : //gafferongames.com/game-physics/fix-your-timestep/ http://www.pygame.org/wiki/ConstantGameSpeed?parent=CookBook – Patashu

+0

@ Паташу Извините, но эта вещь немного сложна для меня понять. Можете ли вы набросать решение, примерно? – cwj

+0

Если связанная информация «слишком сложно для вас понять», я предлагаю вам медитировать на ней, пока это не так, потому что это очень важно понять. Или вы можете задать конкретные вопросы, которые у вас есть. – Patashu

ответ

1

Возможно, из-за усечения координат. Если вы убираете координаты, то при 60 кадрах в секунду вы убираете намного больше, чем при 10 кадрах в секунду, поэтому движение может быть медленнее.

В таком случае, если вы округлите координаты, вы сможете достичь более близких результатов.

Другим решением может быть координата как float, поэтому вы вычисляете движения с использованием сохраненных поплавков в качестве базы, затем вы округляете, чтобы нарисовать спрайт в int-координатах.

+0

Они хранятся внутри как плавающие. – cwj

+0

Хорошо, просто еще одна догадка, делаете ли вы какие-то дивизии? Если ваше разделение включает только значения int, вы получаете целочисленное деление. – pmoleri

-1

Все, что вам нужно сделать, это сделать circle.move (x), где x - это пространство, которое вы хотите переместить. Таким образом, FPS не должно быть проблемой для вас, он будет перемещать расстояние независимо.

Только моя догадка, извините, если это не сработает.

-Pip

Смежные вопросы