Python 即使在pygame中释放钥匙后,我的精灵仍会继续移动

Python 即使在pygame中释放钥匙后,我的精灵仍会继续移动,python,python-3.x,pygame,Python,Python 3.x,Pygame,我的精灵即使在释放钥匙后也会继续移动。当我释放箭头键时,如何阻止精灵移动 这是我的桨雪碧课。在这里,我给了桨一个速度,当按下键时,速度应该加到精灵上 #Paddle sprite class Paddle(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((90,20)) sel

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

这是我的桨雪碧课。在这里,我给了桨一个速度,当按下键时,速度应该加到精灵上

#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
我将所有精灵添加到一个精灵组

#All elements of the game
all_sprites = pygame.sprite.Group()
paddle = Paddle()
all_sprites.add(paddle)
这是主回路。我认为有一些循环增加速度的精灵,但我找不到它

#游戏主循环
运行=真
运行时:
#游戏性的FPS
时钟滴答声(fps)
#事件主循环
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
#更新游戏中的所有对象
所有精灵更新()
#银幕上
wn.填充(黑色)
所有精灵。绘制(wn)
pygame.display.flip()
pygame.quit()
运行=真
运行时:
#事件主循环
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
#更新游戏中的所有对象
所有精灵更新()
#银幕上
wn.填充(黑色)
所有精灵。绘制(wn)
pygame.display.flip()
pygame.quit()
如果未按左键或右键,则必须重置速度(
self.speedx
):

类桨(pygame.sprite.sprite):
# [...]
def更新(自我):
keys=pygame.key.get_pressed()
如果键[pygame.K_左]:
self.speedx=-5
如果键[pygame.K_RIGHT]:
self.speedx=5
如果不是键[pygame.K_LEFT]而不是键[pygame.K_RIGHT]:
self.speedx=0
self.rect.x+=self.speedx
因为在每次更新调用中,位置仍然会更新,而且由于速度没有重置,它会继续按照之前设置的方向移动


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

类桨(pygame.sprite.sprite):
# [...]
def更新(自我):
self.speedx=0
keys=pygame.key.get_pressed()
如果键[pygame.K_左]:
self.speedx=-5
如果键[pygame.K_RIGHT]:
self.speedx=5
self.rect.x+=self.speedx

或者您只能在按下任意一个键时更新位置,但重置值可能更容易理解。@Menotdan因为有一个属性表示当前速度,所以应该设置它。这就是我所说的“更容易理解”,因为将速度设置为0意味着对象的速度是0@Menotdan我的观点是,该属性应说明当前速度,可能稍后用于其他用途(例如,用于某种速度或方向显示)。属性不应包含不表示对象当前状态的值。在这段视频中,他使用了相同的代码,但当释放钥匙时,他的精灵停止移动