首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pygame.transform.rotate不工作

pygame.transform.rotate不工作
EN

Stack Overflow用户
提问于 2015-09-17 03:02:44
回答 1查看 1.5K关注 0票数 1

下面的代码是我正在编写的游戏中npc类的一个绘图函数(源代码:https://github.com/hailfire006/games/blob/master/strategy%20gamev2),除了这一行之外,它都很好用

代码语言:javascript
运行
复制
pygame.transform.rotate(self.sprite.image,angle)

它应该使全国人民代表大会转向它要移动的点。不管是什么原因,它都不是旋转的。我认为这可能与我没有将这个函数的结果存储到一个变量的事实有关,但我不确定。

其馀职能如下:

代码语言:javascript
运行
复制
    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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-17 03:26:54

你需要一个self._base_sprite和一个self._active_sprite

init代码设置为初始化_base_sprite,然后从以下位置更改行:

代码语言:javascript
运行
复制
pygame.transform.rotate(self.sprite.image,angle)

至:

代码语言:javascript
运行
复制
self._active_sprite = pygame.transform.rotate(self._base_sprite.image,angle)

然后把你的能动的精灵

理由是:

  • 旋转精灵时,要缓冲图像,这样就不会丢失像素(包括任何阿尔法角),从而获得空间
  • 如果你旋转一个旋转的精灵,你会重复这个过程。
  • 如果你继续旋转,你就会失去记忆。
  • 因此,我们在内存中保留了两个面,一个是“基”面,一个是“活动”面。

此外,您的.rect调整代码可能只应该在init函数中完成。我猜你是想调整雪碧的中心?

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32621960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档