python-Pyglet-游戏运行缓慢,对事件和内容感到困惑

好的,我正在与Pyglet一起制作一些游戏/原型,并且我对事件感到困惑.
游戏运行不佳,通过分析,我知道这是因为pyglet.clock.schedule_interval()导致on_draw()每秒被调用60次.我不完全知道为什么on_draw()当前正在使用它可以使用的所有CPU,这很高兴知道.通过更多剖析,我知道绘制100个Sprite也会占用大量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

谢谢.

解决方法:

尝试将您的精灵添加到批处理中,然后绘制它.在pyglet中,绘制速度慢,这就是OpenGL的工作方式.基本上,您希望最大程度地减少抽奖的次数,并尽可能多地将事情分批处理.在您的示例中,我得到了很大的改进,方法是创建一个批处理,然后将所有精灵添加到其中,最后仅绘制该批处理.

http://pyglet.org/doc/programming_guide/displaying_images.html#sprites

这与pygame形成对比,在pygame中,较小的图像比较大的图像便宜,并且您通常可以通过绘制较少的像素来加快游戏速度(通常只重画自上一帧以来发生变化的屏幕部分).

上一篇:CodeGo.net>如何使只有最远的孩子收到共享事件?


下一篇:javascript-如何正确使用SWFObject