В настоящее время я использую pyglet 1.2alpha1 поверх python 3.4 после некоторого использования pygame. В pygame тривиально заставить основной цикл работать настолько быстро, насколько это возможно, предоставляя четкий способ оценки изменений и отмечая падения частоты кадров. Моя цель — создать не игру саму по себе, а симуляцию, и чем быстрее она будет работать, тем счастливее я буду.
Мне довольно трудно понять, как настроить частоту кадров pyglet таким же образом. Я знаю, что мне нужно деактивировать параметр vsync по умолчанию в окне и удалить ограничение fps по умолчанию, но это не решает проблему. Моя реальная попытка установить частоту кадров описана в проблемном коде ниже, который с треском проваливается (ограничен 60 кадрами в секунду).
Плюс через несколько секунд программа описала более низкие замедления до невыносимых скоростей, хотя нагрузка на нее совсем не меняется. Я понял, что виноват вызов update_true_fps, хотя я не понимаю почему: если сначала он может работать со скоростью 60 кадров в секунду, то почему через полминуты он должен работать со скоростью 2 кадра в секунду?
Проблемный код:
import pyglet
from pyglet.window import key
class Pyg:
def __init__(self):
self.window = pyglet.window.Window()
self.fps = 0
pyglet.clock.set_fps_limit(0)
self.window.set_vsync(False)
pyglet.clock.schedule(self.tick)
self.update_true_fps(1)
fps_display = pyglet.clock.ClockDisplay()
@self.window.event
def on_draw():
self.window.clear()
fps_display.draw()
self.fps_label.draw()
def tick(self,dt):
if dt != 0:
self.fps = 1.0/dt
self.update_true_fps()
def update_true_fps(self):
self.fps_label = pyglet.text.Label(text="FPS:"+str(self.fps),x=self.window.width//2,\
y=20, anchor_x='center')
def run(self):
pyglet.app.run()
a = Pyg()
a.run()