在python中使用pyglet,为什么我的鼠标拖动时帧率会加快?

时间:2012-05-09 20:54:01

标签: python performance image animation pyglet

我使用python的pyglet包编写了一个简单的图像显示。在我的Linux laptop上,代码按照我的预期工作,每秒显示60帧。

在我的Windows 7桌面上(使用GeForce GTX 550 Ti的@Xi相当新),帧速率非常低(~10 FPS或更低)。但是,我不认为这是硬件限制,因为鼠标拖动事件会大幅提高帧速率(60 FPS或更高)。

当我没有拖动鼠标时,为什么我的帧速率在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。我很乐意添加任何有用的其他信息。

1 个答案:

答案 0 :(得分:1)

因为我做了任何pyglet已经有一段时间了,但回头看一些旧的代码,我看到它似乎都使用了一个pyglet时钟设置

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

在子类化的pyglet窗口中控制更新速率(其中update是一种窗口方法,它通过timetep参数推进游戏世界,并使窗口无效)。我认为pyglet中没有任何特别保证定期“更改”的更新率。