Используя pyglet в python, почему моя частота кадров увеличивается, если я перетаскиваю мышь?

Я написал простое отображение изображения, используя пакет pyglet Python. На моем ноутбуке с Linux код работал так, как я ожидал, отображая постоянные 60 кадров в секунду.

Однако на моем рабочем столе с Windows 7 (достаточно новый от @Xi с GeForce GTX 550 Ti) частота кадров очень-очень низкий (~10 кадров в секунду или меньше). Однако я не думаю, что это аппаратное ограничение, потому что события перетаскивания мышью резко увеличивают частоту кадров (60 кадров в секунду или более).

Почему у меня такая низкая частота кадров в Windows, когда я не перетаскиваю мышь, и такая высокая, когда я это делаю?

Вот упрощенный код, который я использую для создания такого поведения:

import pyglet
from pyglet.window import mouse

image_1 = pyglet.resource.image('1.png')
image_2 = pyglet.resource.image('2.png')

fps_display = pyglet.clock.ClockDisplay()
image_x, image_y = 0, 0
frame = 0

window = pyglet.window.Window(image_1.width, image_2.height)

@window.event
def on_mouse_drag(x, y, dx, dy, buttons, modifiers):
    global image_x, image_y
    if buttons == mouse.LEFT:
        image_x += dx
        image_y += dy

@window.event
def on_draw():
    global frame
    frame += 1
    window.clear()
    if frame%2 == 0:
        image = image_1
    else:
        image = image_2
    image.blit(x=image_x, y=image_y,
               height=image.height,
               width=image.width)
    fps_display.draw()

if __name__ == '__main__':
    pyglet.app.run()

«1.png» и «2.png» имеют одинаковые размеры в пикселях, это просто разные изображения, поэтому я могу видеть, как переворачивается кадр. Я использую python 2.7.2 и версию pyglet 1.2dev. Я буду рад добавить любую дополнительную информацию, которая будет полезна.


person Andrew    schedule 09.05.2012    source источник


Ответы (1)


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

 clock.schedule_interval(self.update,1.0/75.0)   
 clock.set_fps_limit(75)

в подклассе pyglet Window, чтобы взять под контроль скорость обновления (где update — это метод окна, который продвигает игровой мир с помощью параметра временного шага и делает окно недействительным). Я не думаю, что в pyglet есть что-то, что в противном случае особенно гарантирует регулярную частоту обновления «тикера».

person timday    schedule 09.05.2012
comment
Ваш ответ привел меня к нужному месту в документации: pyglet.org/doc/programming_guide/ animation_techniques.html - person Andrew; 10.05.2012