3

pythonのpygletパッケージを使って簡単な画像表示を書いてみました。私のLinux ラップトップでは、コードは期待どおりに機能し、1 秒あたり 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を使用しています。役立つ追加情報を追加できれば幸いです。

4

1 に答える 1

1

ピグレットをやってからしばらく経ちましたが、古いコードを振り返ってみると、すべてピグレットクロックのセットアップを使用しているようです

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

サブクラス化された pyglet Window で更新レートを制御します ( update はタイムステップ パラメータによってゲーム ワールドを進め、ウィンドウを無効にするウィンドウ メソッドです)。ピグレットには、通常の「ティッカー」更新レートを特に保証するものはないと思います。

于 2012-05-09T23:27:27.770 に答える