Python Pygame图像动画循环未正确循环

Python Pygame图像动画循环未正确循环,python,pygame,python-3.6,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.i

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

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

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)
类飞船(pygame.sprite.sprite):
改变x=0
延迟=0
帧=1
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=PlayerShip0.convert_alpha()
self.rect=self.image.get_rect()
self.rect.x=屏幕x/2-100
self.rect.y=SCREEN_y-40
def移动(自身、速度):
self.change_x=速度
def停止(自):
self.change_x=0
def更新(自我,屏幕):
self.rect.x+=self.change\u x
如果自校正x<0:
self.rect.x=0
elif self.rect.right>屏幕X:
自校正x-=3
自延迟+=1
如果self.delay>=50:
如果self.frame==1:
self.image=PlayerShip0.convert_alpha()
self.frame=2
self.delay=1
如果self.frame==2:
self.image=PlayerShip1.convert_alpha()
self.frame=3
self.delay=1
如果self.frame==3:
self.image=PlayerShip2.convert_alpha()
self.frame=1
self.delay=1
打印(自选框)
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
设置为
2
,第二个
if
块将立即将其设置为
3
,从而使第三个
if
块的条件真实,依此类推

        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