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)
哇哇哇哇哇哇哇哇哇哇哇......
接下来,我建议返回None,而不是从get_target返回0.然后你的下一行可以是:
if target is not None:
Run Code Online (Sandbox Code Playgroud)
哪个稍快.
下次,尝试并分析代码的每个部分.您可以使用python的分析工具详细查看您的代码,或者只编写您自己的简单定时器控制器.