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

use*_*635 0 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)
Run Code Online (Sandbox Code Playgroud)

Vik*_*ran 5

哇哇哇哇哇哇哇哇哇哇哇......

  1. 不要那样做.

接下来,我建议返回None,而不是从get_target返回0.然后你的下一行可以是:

if target is not None:
Run Code Online (Sandbox Code Playgroud)

哪个快.

下次,尝试并分析代码的每个部分.您可以使用python的分析工具详细查看您的代码,或者只编写您自己的简单定时器控制器.