我正在用pygame制作一个游戏,完整的源代码可以在这里找到:
https://github.com/hailfire006/games/blob/master/strategy%20game
不幸的是,我遇到了一些帧速率问题,我读到的关于这类问题的一切都说它是图形化的,即它与数学无关,与绘制精灵有关。
因此,我已经将问题缩小到我的npc类的以下绘制函数,该函数在我的“对象”列表中的每个npc的每个帧都被调用。它有很多精灵旋转,一个set_colorkey和一个重新调整大小。所有这些都可能是相当昂贵的,所以有没有办法我可以重新编写以下代码来优化它的性能?
PS:对不起,如果我要问的或代码的部分内容不清楚,请指出是否存在混淆,我会编辑我的问题。
b = pygame.sprite.Sprite()
b.image = pygame.image.load("soldier.png").convert()
b.image.set_colorkey((0,0,0))
target = get_target(self)
if target != 0:
angle = math.degrees(math.atan2(self.x - target[0], self.y - target[1])) + 90
b.image = pygame.transform.rotate(b.image,angle)
self.shoot(target)
if self.moving != False:
if abs(self.x - self.moving[0]) < 1 and abs(self.y - self.moving[1]) < 1:
self.moving = False
else:
self.move(self.moving)
if target == 0:
angle = math.degrees(math.atan2(self.x - self.moving[0], self.y - self.moving[1])) + 90
b.image = pygame.transform.rotate(b.image,angle)
b.image = pygame.transform.smoothscale(b.image,(50,50))
b.rect = b.image.get_rect()
b.rect.topleft = [self.x - 20, self.y - 20]
window.blit(b.image, b.rect)
答案 0 :(得分:5)
Woah woah woah ...你是在每帧加载和转换.png吗?
接下来,我建议返回None,而不是从get_target返回0。然后你的下一行可以是:
if target is not None:
稍微更快。
下次尝试分析代码的每个部分。您可以使用python's profiling tools详细查看代码,或只使用write your own simple timer controller。