当我移动 Sprite 时,它​​会留下重复项

Sprite leaves duplicates when I move it

一直在网上学习,利用各种教程在pygamewindow中画了一个精灵。我现在试图让它在屏幕上移动一定数量的像素(取决于从 diceroll 返回的数字)。

def diceroll():
    roll = random.randint(1, 6)
    print(roll)
    playerCar.move_piece_hoz((WIDTH / 13) * roll)


def main():
    run = True
    clock = pygame.time.Clock()

    while run:  # a while loop to run the game out of, it sets the clock speed and also consistently checks if
        # user ever quits
        clock.tick(FPS)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                diceroll()

        # checks any updates to the array of sprites
        all_sprites_list.update()

        # draws all our sprites in their respective positions
        all_sprites_list.draw(screen)

        # Refresh Screen
        pygame.display.flip()


main()

有相关代码,我基本上想要它,所以只要玩家按下鼠标左键,它就会调用掷骰子函数,然后在棋盘上随机选择数量的棋子。但是,每当我按下鼠标左键时,精灵基本上都停留在它的当前位置,并在它应该去的地方绘制一个新的副本。我附上了一张图片,以防对我的意思有任何混淆 here。精灵是红色方块。

如果我在 main() 函数之外单独使用 : diceroll() 手动调用该函数。精灵被正确重绘,没有任何问题,也没有留下重复项,但是这样我只能调用它一次,这不是我需要的。

谢谢。

screen 是一个 pygame.Surface 对象。 当您在 Surface 上绘制内容时,存储在 Surface 对象中的像素数据会发生变化。整个场景在每一帧中都被重新绘制。您需要在每一帧清除显示或绘制背景:

def main():
    run = True
    clock = pygame.time.Clock()

    while run:  # a while loop to run the game out of, it sets the clock speed and also consistently checks if
        # user ever quits
        clock.tick(FPS)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                diceroll()

        screen.fill(0) # <--- this is missing

        # checks any updates to the array of sprites
        all_sprites_list.update()

        # draws all our sprites in their respective positions
        all_sprites_list.draw(screen)

        # Refresh Screen
        pygame.display.flip()


main()

典型的 PyGame 应用程序循环必须: