关于ZAKER 融媒体解决方案 合作 加入

python – FPS 与 Pyglet 一半的显示器刷新率

CocoaChina 10-21

我刚开始使用 Pyglet, 我写了一个小程序 , 它在屏幕上移动一个球 . 现在我很难建立 60 fps 的稳定帧速率 . 虽然 Pyglet 应该与我的显示器 60Hz 的刷新率同步 , 但是 Pyglet 将我的 fps 设置为刷新率的一半 ( 例如 , 当 60Hz,30 fps 时 ) . 我的代码中是否存在导致此问题的错误?

import pygletimport physicalobjectimport randomfrom pyglet.window import mousepyglet.resource.path = [ './resources' ] pyglet.resource.reindex ( ) ball_image = pyglet.resource.image ( "ball2.png" ) #sets clock formatfps_display = pyglet.clock.ClockDisplay ( format='% ( fps ) .2f fps' ) def center_image ( image ) : image.anchor_x = image.width/2 image.anchor_y = image.height/2center_image ( ball_image ) ball = physicalobject.PhysicalObject ( img=ball_image, x = 400, y = 300 ) ball.scale = .2ball.velocity_x = random.randint ( -4,4 ) *150ball.velocity_y = random.randint ( -4,4 ) *150#Calls update function to set new ball position based on velocitydef update ( dt ) : ball.update ( dt ) @window.eventdef on_mouse_drag ( x, y, dx, dy, button, modifiers ) : ball.x = x ball.y = y ball.velocity_x = dx * 20 ball.velocity_y = dy * 20@window.eventdef on_draw ( ) : window.clear ( ) ball.draw ( ) fps_display.draw ( ) def main ( ) : pyglet.clock.schedule_interval ( update, 1/120.0 ) pyglet.app.run ( ) if __name__ == '__main__': main ( )

最佳答案

Pyglet 在某些系统上根本无法正确处理它 , 你必须禁用应用程序窗口的 vsync 以使其工作 . 这是一个示例脚本 , 您可以运行以了解它的工作原理:

import pyglet# Show FPSfps = pyglet.clock.ClockDisplay ( ) # The game windowclass Window ( pyglet.window.Window ) : def __init__ ( self ) : super ( Window, self ) .__init__ ( vsync = False ) # Run "self.update" 128 frames a second and set FPS limit to 128. pyglet.clock.schedule_interval ( self.update, 1.0/128.0 ) pyglet.clock.set_fps_limit ( 128 ) # You need the dt argument there to prevent errors, # it does nothing as far as I know. def update ( self, dt ) : pass def on_draw ( self ) : pyglet.clock.tick ( ) # Make sure you tick the clock! self.clear ( ) fps.draw ( ) # Create a window and runwin = Window ( ) pyglet.app.run ( )

以上内容由"CocoaChina"上传发布 查看原文

觉得文章不错,微信扫描分享好友

扫码分享