我使用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