在 pygame 中使用箭头键更新精灵位置

Update sprite position using arrow keys in pygame

我试图在按下箭头键(只是向左和向右)时让精灵移动,但没有任何反应。我一直在努力让它发挥作用,但我做不到。精灵被绘制但它没有移动,它只是停留在那里。这是代码:

import pygame
pygame.init()

class Player(pygame.sprite.Sprite):

    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.sprites = []
        self.sprites.append(pygame.image.load('Sprites/Player/running1.png'))
        self.sprites.append(pygame.image.load('Sprites/Player/running2.png'))
        self.sprites.append(pygame.image.load('Sprites/Player/running3.png'))
        self.sprites.append(pygame.image.load('Sprites/Player/running4.png'))
        self.sprites.append(pygame.image.load('Sprites/Player/running5.png'))
        self.sprites.append(pygame.image.load('Sprites/Player/running6.png'))
        self.current_sprite = 0
        self.image = self.sprites[self.current_sprite]
        self.rect = self.image.get_rect()
        self.rect.topleft = [x,y]
        self.x = self.rect.x
        self.y = self.rect.y
        self.walking = False
        self.vel = 5
    
    def walk(self):
        self.walking = True

    def update(self):
        if self.walking == True:
            self.current_sprite += 1         
            if self.current_sprite >= len(self.sprites):
                self.current_sprite = 0
                self.walking = False
            self.image = self.sprites[self.current_sprite]


sWidth = 800
sHeight = 400
screen = pygame.display.set_mode((sWidth,sHeight))
pygame.display.set_caption("Game")
background = pygame.image.load('Sprites/Background/bg1.jpg')

allSprites = pygame.sprite.Group()
player = Player(300,230)
allSprites.add(player)

clock = pygame.time.Clock()
keepGoing = True

while keepGoing:
    clock.tick(20)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            keepGoing = False

现在,我想让它在我按下箭头键时移动。

keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
    player.x -= player.vel

elif keys[pygame.K_RIGHT]:
    player.x += player.vel

else:
    player.walking = False

screen.blit(background, (0,0))
allSprites.draw(background)
allSprites.update()
pygame.display.flip()

玩家的位置存储在self.rect中。 rect 属性被 pygame.sprite.Group.draw 用来绘制 Sprite。因此,您必须更新 player.rect.xplayer.rect.y 而不是 player.xplayer.y。您根本不需要 xy 属性:

keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
    player.rect.x -= player.vel

elif keys[pygame.K_RIGHT]:
    player.rect.x += player.vel