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我的观点是,该属性应说明当前速度,可能稍后用于其他用途(例如,用于某种速度或方向显示)。属性不应包含不表示对象当前状态的值。在这段视频中,他使用了相同的代码,但当释放钥匙时,他的精灵停止移动