1 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
性能下降是由于您 self.drawMap()在事件循環(huán)中調(diào)用而引起的。每個(gè)事件調(diào)用一次事件循環(huán)。每幀可能發(fā)生多個(gè)事件,尤其是在移動(dòng)鼠標(biāo)時(shí)。
我建議僅在需要時(shí)創(chuàng)建地圖。將地圖渲染為pygame.Surface對(duì)象,blit并將地圖Surface渲染到每一幀的顯示器上。當(dāng)?shù)貓D發(fā)生變化時(shí),重新創(chuàng)建地圖Surface。
創(chuàng)建一個(gè)在目標(biāo)Surface上而不是直接在顯示Surface上呈現(xiàn)的“draw”方法:
def drawMap(self, traget_surf):
# draw on traget_surf
# [...]
添加一個(gè)變量map_surf和map_changed = True. map_changed如果已設(shè)置和設(shè)置,則在應(yīng)用程序循環(huán)中渲染地圖map_changed == False。Surface在每一幀中顯示blit。每當(dāng)需要更改地圖時(shí),設(shè)置以下內(nèi)容就足夠了:map_surf map_changed = True
map_surf = pygame.Surface(display_surf.get_size())
map_changed = True
while nbPixel < 50:
# [...]
if map_changed:
self.drawMap(map_surf)
map_changed = False
# [...]
display_surf.blit(map_surf, (0, 0))
display_surf.blit(imageWall, tuple(blockAbovePos))
display_surf.blit(imageTarget, tuple(newPos))
display_surf.blit(imageWall,tuple(initPosToBlit))
display_surf.blit(imagePlayer, tuple(mousePos))
添加回答
舉報(bào)