我使用tkinter和Pygame创建了一个模拟,我目前在优化我的代码时遇到了问题。该方案需要借鉴500-1000“蚁族”精灵的表面 - 这些蚂蚁的行为由此类Pygame代码太慢了
class Particle(pygame.sprite.Sprite):
def __init__(self,color,width,height):
# call parent class constructor
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(ANT_SPRITE_PATH)
self.rect = self.image.get_rect()
self.WIDTH = width
self.HEIGHT = height
def updatePos(self,pos):
self.rect.x = pos[0]
self.rect.y = pos[1]
定义在另一个类的初始化,PyGameWin,粒子的实例被创建,如下所示:
self.ants = [Particle('black',1,1) for x in range(500)]
在pygame的窗口的事件循环
,当“启动”在Tkinter的按钮已被按下,执行以下代码:
t = threading.Thread(target=self.startAntMotion)
t.start()
其中startAntMotion ()定义如下:
def startAntMotion(self):
for ant in self.ants[0:100]:
ant.updatePos(self.start)
self.surface.blit(ant.image,ant.rect)
pygame.display.update()
我打算为未来的self.ants中剩余的400个对象添加更多的线程。当程序运行并且tkinter中的启动按钮被按下时,“蚂蚁”被拖到屏幕上需要很长时间。有什么方法可以优化代码,使其运行速度更快?最长执行的代码是精灵在屏幕上的实际绘制。
也许尝试在循环后调用'pygame.display.update()'? –
问题的一部分可能是'pygame'不支持多线程。您可能需要执行类似[this](http://stackoverflow.com/a/7362993/355230)的操作。 – martineau
如果在页面上建议的其他修复之后性能仍然是问题,那么可以考虑切换到OpenGL绑定,如pyopengl,这是3d硬件加速,以显着提升性能。这将需要重新编写渲染代码,尽管您仍然可以使用pygame创建窗口,加载图像和处理事件。 – CodeSurgeon