Ограничиваем скорость игры в Blitz3D (render tweening)
При создании любого приложения на Blitz3D, необходимо заранее предусмотреть одинаковую скорость работы, вне зависимости от мощности компьютера. Да, ведь запустив обычный цикл с перемещением какого-либо объекта - скорость его движения будет разной на разных компьютерах, в зависимости от различных технических особенностей (видеокарта, процессор, архитектура мат. платы и т.д.).
Для игр самый подходящий способ это render tweening, когда логика игры обновляется заданное количество раз в секунду, а все промежуточные состояния - интерполируются, тем самым снижая нагрузку на систему.
Пример реализации render tweening на Blitz3D:
Global period
Global FPS=30
Global time, elapsed, ticks, tween#
period=1000/FPS
time=MilliSecs()-period
While Not KeyHit(1)
Repeat
elapsed = MilliSecs()-time
Until elapsed
ticks = elapsed/period
tween# = Float(elapsed Mod period)/Float(period)
For k=1 To ticks
time = time+period
If k = ticks Then
CaptureWorld
UpdateWorld
End If
Next
RenderWorld tween
Flip false
Wend
В примере как видите указано ограничение в 30 FPS (frame per second/кадров в секунду). Работа метода проста - разобраться не сложно.
Рекомендую CaptureWorld и UpdateWorld со своими функциями апдейта засунуть в общую функцию Update(), например. В цикле ее и ставить. Так намного удобнее и быстрее.
Если что-то не понятно, задавайте вопросы в комментариях.
