pygame "move_ip" 方法似乎不起作用

pygame "move_ip" method seems not working

我正在做一个简单的脚本,使用 pygame,它只是移动一个矩形,但是方法 move_ip 似乎没有做任何事情(我按照 RealPython tutorial)。 综上,我得到了一个classPlayer,如下:

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的一个实例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.update(pressed_keys)
    screen.fill((0, 0, 0))
    screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2)) 
    pygame.display.flip()

当我 运行 它正确创建 windows 的代码(显示一个白色矩形,代表玩家)并且程序似乎读取键盘输入但代表玩家的块确实没有任何动作。

(实例方法 .update 被正确调用,各种 'if' 语句也正常工作,但亲戚 self.rect.move_ip 没有对玩家)

玩家在 (SCREEN_WIDTH/2, SCREEN_HEIGHT/2)

不断被吸引
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2)) 

您必须将播放器拖到 rect 属性中存储的位置。 pygame.Surface.blit) 的第二个参数可以是一个矩形。在这种情况下,矩形的左上角将用作 blit 的位置:

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

但是,如果您使用的是 pygame.sprite.Sprite then you should also use 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()