Pygame 图像动画循环未正确循环
Pygame image animation loop not properly looping
我有一个小动画循环,可以快速循环显示图像。目标是使它保持恒定和流畅,但我似乎 运行 遇到图像显示一秒钟并停留在第一帧的问题。
以下代码来自整个播放器class 连同动画:
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
块中将self.frame
设置为2
,第二个if
块将立即将其设置为3
,使第三个 if
块的条件为真,依此类推。
我有一个小动画循环,可以快速循环显示图像。目标是使它保持恒定和流畅,但我似乎 运行 遇到图像显示一秒钟并停留在第一帧的问题。
以下代码来自整个播放器class 连同动画:
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
块中将self.frame
设置为2
,第二个if
块将立即将其设置为3
,使第三个 if
块的条件为真,依此类推。