好吧,我正在用Pyglet做一个小游戏/原型,我对事件感到困惑。
游戏运行得很糟糕,通过分析我知道这是因为on_draw()
由于pyglet.clock.schedule_interval()
每秒被调用60次。我不确切地知道为什么on_draw()
目前正在使用它可以获得的所有CPU,这将是很好的知道。通过剖析更多,我知道绘制100个Sprites也需要大量的CPU,比我认为应该采取的更多(我甚至不知道它应该采用CPU还是只采用GPU)。
on_draw()
默认做什么,我可以避免任何无用的额外内容吗?schedule_interval()
不会触发on_draw()
?一些代码:
screen = pyglet.window.Window(800, 600, vsync=False, caption="Project")
tileimage = pyglet.image.create(50, 50, pyglet.image.SolidColorImagePattern((0, 255, 0, 255)))
class tileclass(pyglet.sprite.Sprite):
def __init__(self, x, y):
pyglet.sprite.Sprite.__init__(self, tileimage)
self.x = x
self.y = y
self.rect = pygame.Rect(self.x - self.width / 2, self.y - self.height / 2, self.width, self.height)
self.image.anchor_x = self.width // 2
self.image.anchor_y = self.height // 2
tiles = []
x = 25
y = 25
for i in range(100):
tiles.append(tileclass(x, y))
if x == 475:
x = 25
y+=50
else:
x+=50
@screen.event
def on_draw():
screen.clear()
for t in tiles:
t.draw()
fps.draw()
pyglet.clock.schedule_interval(update, 1/60) #Logic stuff
感谢。
答案 0 :(得分:3)
尝试将精灵添加到批处理中,然后绘制它。在pyglet中,绘制调用的速度很慢,就像OpenGL的工作方式一样。基本上,您希望尽可能减少绘制的数量并尽可能地将事物组合在一起。通过创建一个批处理,然后将所有精灵添加到其中,最后只绘制批处理,我的示例得到了大幅改进。
http://pyglet.org/doc/programming_guide/displaying_images.html#sprites
这与pygame有点形成鲜明对比,其中小图像比大图像便宜,并且通常通过绘制更少的像素(通常仅重绘自上一帧以来具有变化的屏幕的部分等等)来使游戏更快。