1

私は Pygame で小さなプロジェクトに取り組んでいますが、問題が発生しました。キャラクターを動かすと、後ろに跡が残るように見えます。

    while 1:
    movey=0
    movex=0
    x=0
    y=0
    while True:
        for event in pygame.event.get():   
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == KEYDOWN:
               
                if event.key == K_w:
                    movey = -1
                elif event.key == K_s:
                    movey = +1
                elif event.key == K_a:
                    movex = -1
                elif event.key == K_d:
                    movex = +1

            if event.type == KEYUP:

                if event.key == K_w:
                    movey = 0
                elif event.key == K_s:
                    movey = 0
                elif event.key == K_a:
                    movex = 0
                elif event.key == K_d:
                    movex = 0
        x=x+movex
        y=y+movey

        functions_for_game.character(char, display, x, y)
        pygame.display.flip()

    
if __name__=='__main__':

  main()

functions_for_game.character(char, display, x, y) を含む

def character(char, screen, x, y):
    char_main = pygame.image.load(char).convert_alpha()
    screen.blit(char_main, (x, y))
    pygame.display.update()  

「トレイル」とは、これを意味 ます。

4

1 に答える 1

2

フレームごとに背景画像を画面にブリットする必要があります (画面の「汚れた」部分のみを更新する高度な手法もありますが、それは別のトピックです)。

プレーヤーの画像を画面に繰り返し描画して移動すると、古い画像が画面から「削除」されないため、跡が残っているように見えます。

コードにはさらにいくつかの問題がありますが、主な問題は背景画像を再描画しないことです。次のようになります。

while True:
    for event in pygame.event.get():  
        ...
    ...
    screen.blit(*your background surface here*)
    functions_for_game.character(char, display, x, y)
    pygame.display.flip()
于 2013-09-11T09:26:07.307 に答える