如何针对性能优化此代码?

时间:2015-09-17 01:32:28

标签: python optimization pygame

我正在用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)

1 个答案:

答案 0 :(得分:5)

Woah woah woah ...你是在每帧加载和转换.png吗?

  1. 不要那样做。
  2. 接下来,我建议返回None,而不是从get_target返回0。然后你的下一行可以是:

    if target is not None:
    

    稍微更快。

    下次尝试分析代码的每个部分。您可以使用python's profiling tools详细查看代码,或只使用write your own simple timer controller