即使释放pygame中的键,我的精灵仍会继续移动

MF8*_*MF8 5 python pygame python-3.x

即使释放钥匙,我的精灵仍会继续移动。释放箭头键时如何阻止精灵移动?

这是我的Paddle Sprite课。在这里,我给了桨一个速度,按下该键时应该将速度添加到精灵中。

#Paddle sprite
class Paddle(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((90,20))
        self.image.fill(white)
        self.rect = self.image.get_rect()
        self.rect.centerx = (width//2)
        self.rect.bottom = height-15
        self.speedx = 0
     def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.speedx = -5
        if keys[pygame.K_RIGHT]:
            self.speedx = 5
        self.rect.x+=self.speedx
Run Code Online (Sandbox Code Playgroud)

我将所有的精灵添加到了精灵组

#All elements of the game
all_sprites = pygame.sprite.Group()
paddle = Paddle()
all_sprites.add(paddle)
Run Code Online (Sandbox Code Playgroud)

这是主循环。我认为有一种循环将速度增加到子画面上,但我找不到。

#Paddle sprite
class Paddle(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((90,20))
        self.image.fill(white)
        self.rect = self.image.get_rect()
        self.rect.centerx = (width//2)
        self.rect.bottom = height-15
        self.speedx = 0
     def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.speedx = -5
        if keys[pygame.K_RIGHT]:
            self.speedx = 5
        self.rect.x+=self.speedx
Run Code Online (Sandbox Code Playgroud)

Rab*_*d76 3

self.speedx如果既没有按下LEFT也没有按下 ,则您必须重置速度 ( ) RIGHT

class Paddle(pygame.sprite.Sprite):

    # [...]

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.speedx = -5
        if keys[pygame.K_RIGHT]:
            self.speedx = 5

        if not keys[pygame.K_LEFT] and not keys[pygame.K_RIGHT]:
            self.speedx = 0

        self.rect.x+=self.speedx  
Run Code Online (Sandbox Code Playgroud)

因为在每次更新调用时,位置仍然会更新,并且由于速度不会重置,因此它会继续沿之前设置的方向移动。


或者,可以在 开始时将速度设置为 0 update

class Paddle(pygame.sprite.Sprite):

    # [...]

    def update(self):

        self.speedx = 0

        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.speedx = -5
        if keys[pygame.K_RIGHT]:
            self.speedx = 5

        self.rect.x+=self.speedx 
Run Code Online (Sandbox Code Playgroud)