旧图像保留在带有精灵动画的屏幕上

Old images remain on screen with sprite animation

我试着制作青蛙的动画(就像这个视频中的:https://www.youtube.com/watch?v=MYaxPa_eZS0&list=PL8ui5HK3oSiHnIdi0XIAVXHAeulNmBrLy&index=4)。 我几乎成功了。但是使用我的代码,旧图像仍保留在屏幕上。我真的找不到我哪里出错了。有人可以看看我的代码并告诉我哪里出错了吗?这是我的代码:

import pygame
import sys
from os import path

pygame.init()

screen_width=600
screen_height=400

screen=pygame.display.set_mode((screen_width,screen_height))
pygame.display.set_caption('animation')

clock=pygame.time.Clock()

#classes
class Player(pygame.sprite.Sprite):
    def __init__(self,images):
        pygame.sprite.Sprite.__init__(self)
        image_list=images
        self.index=0
        self.animation_state=False
        self.image=pygame.image.load(image_list[self.index])
        self.rect=self.image.get_rect()
        self.rect.center=((screen_width//2),(screen_height//2))

    def animation(self):
        self.animation_state=True
            
    def update(self):
        if self.animation_state==True:
            self.index+=0.07
            if self.index >=10:
                self.index=0
                self.animation_state=False
        self.image=pygame.image.load(image_list[int(self.index)])
        


#images
dir=path.dirname(__file__)
img_dir=path.join(dir,'img')
image_list=[]

for i in range (1,11):
    image_list.append(path.join(img_dir,f'attack_{i}.png'))

player=Player(image_list)
player_group=pygame.sprite.Group()
player_group.add(player)


while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type==pygame.KEYDOWN:
            if event.key==pygame.K_SPACE:
                player.animation()
            
    player_group.update()            
    player_group.draw(screen)
    pygame.display.flip()
    clock.tick(60)
            
pygame.quit()
sys.exit()

你必须先用一些颜色填充屏幕,这样所有以前的图像都 删除:

screen.fill((r, g, b))

然后您可以再次将内容绘制到屏幕上。希望这对你有用。

while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type==pygame.KEYDOWN:
            if event.key==pygame.K_SPACE:
                player.animation()
    screen.fill((255, 255, 255))        
    player_group.update()            
    player_group.draw(screen)
    pygame.display.flip()
    clock.tick(60)
            
pygame.quit()
sys.exit()