簡體   English   中英

pygame“move_ip”方法似乎不起作用

[英]pygame "move_ip" method seems not working

我正在做一個簡單的腳本,使用 pygame,它只是移動一個矩形,但方法“move_ip”似乎沒有做任何事情(我遵循了 RealPython 教程中的代碼: https://realpython.com/pygame-a-底漆/ )。

綜上,我得到了一個class播放器,如下:

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super(Player, self).__init__()
        self.surf = pygame.Surface((75, 25))
        self.surf.fill((255, 255, 255))
        self.rect = self.surf.get_rect()

    def update(self, pressed_k):
        if pressed_k[K_UP]:
            self.rect.move_ip(0, -5)
        if pressed_k[K_DOWN]:
            self.rect.move_ip(0, 5)
        if pressed_k[K_LEFT]:
            self.rect.move_ip(-5, 0)
        if pressed_k[K_RIGHT]:
            self.rect.move_ip(5, 0)

然后我得到了前面描述的 class 的實例“播放器”,它在循環中使用,如下所示:

while running:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                running = False
        elif event.type == QUIT:
            running = False

    pressed_keys = pygame.key.get_pressed() 
    player.update(pressed_keys)

    screen.fill((0, 0, 0))

    screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2)) 

    pygame.display.flip()

當我運行代碼時,它會正確創建 windows(顯示一個白色矩形,代表播放器),並且似乎程序讀取了鍵盤輸入,但代表播放器的塊沒有任何動作。

(實例method.update被正確調用,各種'if'語句也正常工作,但親戚'self.rect.move_ip'不會對播放器的position做任何改變)

玩家一直在(SCREEN_WIDTH/2, SCREEN_HEIGHT/2)處繪制

screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))

您必須將播放器拖到存儲在rect屬性中的 position 上。 pygame.Surface.blit)的第二個參數可以是一個矩形。 在這種情況下,矩形的左上角將用作 blit 的 position:

screen.blit(player.surf, player.rect)

但是,如果您使用的是pygame.sprite.Sprite那么您也應該使用pygame.sprite.Group

player_group = pygame.sprite.Group(player)

while running:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                running = False
        elif event.type == QUIT:
            running = False

    pressed_keys = pygame.key.get_pressed() 
    player_group.update(pressed_keys)

    screen.fill((0, 0, 0))
    player_group.draw(screen)
    pygame.display.flip()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM