python - Pygame 图像动画循环未正确循环

标签 python pygame python-3.6

我有一个小的动画循环,可以快速循环浏览图像。我们的目标是使其保持恒定和流畅,但我似乎遇到了一个问题,即图像显示一秒钟并停留在第一帧。

以下代码来自带有动画的整个播放器类:

class Ship(pygame.sprite.Sprite):

    change_x = 0

    delay = 0
    frame = 1

    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        self.image = PlayerShip0.convert_alpha()

        self.rect = self.image.get_rect()

        self.rect.x = SCREEN_X / 2 - 100
        self.rect.y = SCREEN_Y - 40

    def move(self, speed):
        self.change_x = speed

    def stop(self):
        self.change_x = 0

    def update(self, screen):
        self.rect.x += self.change_x

        if self.rect.x < 0:
            self.rect.x = 0
        elif self.rect.right > SCREEN_X:
            self.rect.x -= 3

        self.delay += 1
        if self.delay >= 50:
            if self.frame == 1:
                self.image = PlayerShip0.convert_alpha()
                self.frame = 2
                self.delay = 1
            if self.frame == 2:
                self.image = PlayerShip1.convert_alpha()
                self.frame = 3
                self.delay = 1
            if self.frame == 3:
                self.image = PlayerShip2.convert_alpha()
                self.frame = 1
                self.delay = 1

        print(self.frame)

        screen.blit(self.image,self.rect)

最佳答案

而不是

        if self.frame == 1:
            self.image = PlayerShip0.convert_alpha()
            self.frame = 2
            self.delay = 1
        if self.frame == 2:
            self.image = PlayerShip1.convert_alpha()
            self.frame = 3
            self.delay = 1
        if self.frame == 3:
            self.image = PlayerShip2.convert_alpha()
            self.frame = 1
            self.delay = 1

使用

        if self.frame == 1:
            self.image = PlayerShip0.convert_alpha()
            self.frame = 2
            self.delay = 1
        elif self.frame == 2:
            self.image = PlayerShip1.convert_alpha()
            self.frame = 3
            self.delay = 1
        elif self.frame == 3:
            self.image = PlayerShip2.convert_alpha()
            self.frame = 1
            self.delay = 1

否则,您可以在第一个 if block 和第二个 if block 中将 self.frame 设置为 2 block 会立即将其设置为 3,使第三个 if block 的条件为真,依此类推。

关于python - Pygame 图像动画循环未正确循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44446493/

相关文章:

python - 在 Python 中检查较长字符串中存在的模糊/近似子字符串?

python - 在视口(viewport)周围包裹一个 pygame 表面

python - 如何根据窗口大小缩放图像?

python - 如何通过python-3.6在网站html中搜索?

python - 是否有推荐的方法来调试 Python 中 Web 应用程序后端卡住的原因?

python - 属性错误 : Can't get attribute on <module '__main__' from 'manage.py' >

python - numpy.irr 和 Excel IRR 函数的 IRR 结果不同

python的lxml和iterparse方法

python - 无法使用 Twine 上传到 PyPi

python - 在 Pygame 中跨屏幕移动对象