gpt4 book ai didi

python - pygame.transform.rotate 不工作

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:33 25 4
gpt4 key购买 nike

下面的代码是我在 pygame 中制作的游戏中 npc 类的绘制函数(来源: https://github.com/hailfire006/games/blob/master/strategy%20gamev2 ),除了这一行之外,它都运行良好

pygame.transform.rotate(self.sprite.image,angle)

这应该使 npc 朝着它要移动到的点旋转。不管出于什么原因,它只是不旋转。我认为这可能与我没有将该函数的结果存储到变量中有关,但我不确定。

函数的其余部分:

    target = get_target(self)
if target != 0:
angle = math.degrees(math.atan2(self.x - target[0], self.y - target[1])) + 90
self.sprite.image = pygame.transform.rotate(self.sprite.image,angle)
self.shoot(target)
if self.moving != False:
if abs(self.x - self.moving[0]) < 3 and abs(self.y - self.moving[1]) < 3:
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
pygame.transform.rotate(self.sprite.image,angle)
if self.hp <= 0:
objects.remove(self)
return

self.sprite.rect = self.sprite.image.get_rect()
self.sprite.rect.topleft = [self.x - 20, self.y - 20]
window.blit(self.sprite.image, self.sprite.rect)

最佳答案

您需要有一个 self._base_sprite 和一个 self._active_sprite

设置您的 init 代码来初始化 _base_sprite,然后更改您的行:

pygame.transform.rotate(self.sprite.image,angle)

至:

self._active_sprite = pygame.transform.rotate(self._base_sprite.image,angle)

然后blit你的事件 Sprite

推理是:

  • 旋转 Sprite 时,您会缓冲图像,这样就不会丢失像素(包括任何 alpha 角),从而获得空间
  • 如果您旋转一个旋转的 Sprite ,您将重复此过程
  • 如果继续旋转,内存就会耗尽
  • 因此,我们在内存中保留了两个表面,一个是“基础”表面,一个是“事件”表面。

此外,您的 .rect 调整代码可能应该只在您的 init 函数中完成。我想您正在尝试调整 Sprite 的中心?

编辑:注意,this question here高度相关(并且在侧边栏中)。

关于python - pygame.transform.rotate 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32621960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com