2015-01-06 1 views
0

pygame을 잠시 사용하고 난 후에 현재 pyglet 1.2alpha1을 사용하고 있습니다. 파이 게임에서는 메인 루프를 가능한 한 빨리 실행시켜 벤치마킹 변경과 fps 드롭을 기록하는 명확한 방법을 제공하는 것이 간단합니다. 내 목표는 게임 자체를 제작하는 것이 아니라 시뮬레이션과 같은 것입니다. 실행 속도가 빠를수록 행복해질 것입니다.왜이 pyglet 기본 프로그램이 느려지 는가

나는 같은 방식으로 pyglet의 프레임 속도를 설정하는 방법을 알아내는 데 꽤 어려움을 겪고 있습니다. 윈도우의 기본 vsync 옵션을 비활성화하고 기본 fps 제한을 제거해야하지만 문제가 해결되지는 않습니다. 느슨한 framerate를 설정하기위한 나의 실제적인 임시 조치는 문제가되는 코드 하단에 설명되어 있습니다.이 코드는 비참하게 실패합니다 (60fps로 제한됨).

몇 초 후에 프로그램은 작업량이 전혀 변경되지 않더라도 견딜 수없는 속도로 느려지는 속도를 설명했습니다. update_true_fps에 대한 호출이 원인을 알 수는 없지만 원인을 알았습니다. 처음 60fps에서 실행할 수 있다면 30 분 후 2fps로 실행해야하는 이유는 무엇입니까?

문제있는 코드는 : 당신이 너무 많은 레이블 객체를 생성하는 때문에 속도가 느린

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() 

답변

0

이유 중 하나입니다. 라벨은 Pyglet에서 잘 최적화되지 않았고 일반적으로 느린 작업이 많이 포함되었습니다. 매 틱마다 레이블을 만드는 대신 그림을 그릴 때나 객체를 캐시하고 fps가 바뀔 때 텍스트를 변경하는 경우에만 하나를 생성하십시오. 고가의 그래픽 작업을 거치지 않고 값을 콘솔에 기록 할 수도 있습니다. 점차적으로 시간이 지남에 따라 느려지는 경우, 그것은 pyglet 버그, 메모리 누수 등이 될 수 있습니다. 너무 많은 레이블을 만들지 않으면 느려지지 않을 것입니다.

관련 문제