1 回答
TA贡献1810条经验 获得超4个赞
性能下降是由于您 self.drawMap()在事件循环中调用而引起的。每个事件调用一次事件循环。每帧可能发生多个事件,尤其是在移动鼠标时。
我建议仅在需要时创建地图。将地图渲染为pygame.Surface对象,blit并将地图Surface渲染到每一帧的显示器上。当地图发生变化时,重新创建地图Surface。
创建一个在目标Surface上而不是直接在显示Surface上呈现的“draw”方法:
def drawMap(self, traget_surf):
# draw on traget_surf
# [...]
添加一个变量map_surf和map_changed = True. map_changed如果已设置和设置,则在应用程序循环中渲染地图map_changed == False。Surface在每一帧中显示blit。每当需要更改地图时,设置以下内容就足够了: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))
添加回答
举报