Pygame代码太慢了

时间:2016-10-22 21:10:46

标签: python multithreading oop tkinter pygame

我正在使用tkinter和Pygame创建一个模拟,我目前无法优化我的代码。该计划需要绘制500-1000" ant"精灵到表面 - 这些蚂蚁的行为由这个类定义

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窗口的事件循环中,当一个" start&#34>按下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中的开始按钮时,蚂蚁需要很长时间。被绘制到屏幕上。有没有什么方法可以优化代码,以便它可以更快地运行?执行时间最长的代码是将精灵实际绘制到屏幕上。

1 个答案:

答案 0 :(得分:1)

我没有足够的+ rep来评论但是,加载图像的有效方法是这样写的:pygame.image.load(ANT_SPRITE_PATH).convert_alpha()

让我知道这是否会提升你的表现!