敌人的精灵不会向左翻转

Posted

技术标签:

【中文标题】敌人的精灵不会向左翻转【英文标题】:Enemy sprite will not flip left 【发布时间】:2022-01-23 22:12:37 【问题描述】:

我有一个使用下面的函数左右遍历的精灵。当它向左翻转时,它会将 img 翻转 1 帧,然后在向左移动时保持指向右侧。同样的 1 帧翻转也发生在另一侧。使用单个图像效果很好,但是我添加了这个动画循环,现在我很难过。

class Enemy(pygame.sprite.Sprite):#==================================================
    def __init__(self,x,y):   
        pygame.sprite.Sprite.__init__(self)
        self.images_right = []
        self.frame_index = 0
        self.counter = 0
        for num in range (1,8):
            img_right = pygame.image.load(f'img/enemy/num.png')   
            self.images_right.append(img_right)
        self.image = self.images_right[self.frame_index]
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.move_direction = 1
        self.move_counter = 0

    def update(self):
        self.counter += 1
        walk_cooldown = 2
        if self.counter > walk_cooldown:
            self.counter = 0
            self.frame_index += 1
            if self.frame_index >= len(self.images_right):
                self.frame_index = 0
            self.image = self.images_right[self.frame_index]
        self.rect.x += self.move_direction
        self.move_counter += 1
        if abs(self.move_counter) > 32:
            self.move_direction *= -1
            self.image = pygame.transform.flip(self.image, True, False)  
            self.move_counter *= -1

【问题讨论】:

【参考方案1】:

您有一个图像列表。您只是在翻转列表中的最后一张图片。

在构造函数中,创建左右图片列表,在update中选择要显示的图片:

class Enemy(pygame.sprite.Sprite):
    def __init__(self,x,y):   
        pygame.sprite.Sprite.__init__(self)
        
        self.images_right = [pygame.image.load(f'img/enemy/num.png') for num in range (1,8)]
        self.images_left = [pygame.transform.flip(img, True, False) for img in self.images_right]
        
        self.frame_index = 0
        self.image = self.images_right[self.frame_index]
        self.rect = self.image.get_rect(topleft = (x, y))   
        self.counter = 0
        self.move_direction = 1
        self.move_counter = 0

    def update(self):
        self.counter += 1
        walk_cooldown = 2
        if self.counter > walk_cooldown:
            self.counter = 0
            self.frame_index += 1
            if self.frame_index >= len(self.images_right):
                self.frame_index = 0
        self.rect.x += self.move_direction
        self.move_counter += 1
        if abs(self.move_counter) > 32:
            self.move_direction *= -1
            self.move_counter *= -1

        image_list = self.images_right if self.move_direction > 0 else self.images_left    
        self.image = image_list[self.frame_index]

【讨论】:

非常非常感谢!在我复制之前尝试自己这样做,但无济于事:( 会注意这种方法将来应用! @Matt 你知道你可以接受答案吗?这会将它们标记为已解决。如果答案解决了您的问题,请这样做。如果他们帮助您解决了您的问题,也可以对您已经得到答案的旧问题进行此操作。

以上是关于敌人的精灵不会向左翻转的主要内容,如果未能解决你的问题,请参考以下文章

无法使用移动输入翻转精灵

当角色面向左右时翻转 2D 子弹精灵

在画布中翻转精灵

为啥精灵套件中的坐标系会翻转,我可以全局更改吗?

Swift SpriteKit:翻转父精灵随机子节点水平对齐

如何使用 HTML5 Canvas 水平翻转精灵?