我创建了一个Frogger游戏原型和我不想允许同时按下两个键进行移动。目前在我的事件函数中我有以下内容:
for event in pygame.event.get():
# check for closing window
if event.type == pygame.QUIT:
if self.playing:
self.playing = False
self.running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
self.player.speedx = -48
if event.key == pygame.K_RIGHT:
self.player.speedx = 48
if event.key == pygame.K_UP:
self.player.speedy = -48
if event.key == pygame.K_DOWN:
self.player.speedy = 48
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
self.player.speedx = 0
self.player.speedy = 0
if event.key == pygame.K_RIGHT:
self.player.speedx = 0
self.player.speedy = 0
if event.key == pygame.K_UP:
self.player.speedx = 0
self.player.speedy = 0
if event.key == pygame.K_DOWN:
self.player.speedx = 0
self.player.speedy = 0
self.player.rect.x += self.player.speedx
self.player.rect.y += self.player.speedy
这允许用户向左、向右、向上和向下移动。虽然我不希望用户能够同时按下两个键,例如:向左、向上或向右、向上,但它运行正常。还想排除其他方向,例如:左、下或右、下。基本上我希望用户一次只能朝一个方向行进。另外,有没有办法在按键之间设置时间限制?例如,在 1000 毫秒过去之前,您无法再次按下某个键。
您所要做的就是评估按下某个键时速度为 0:
for event in pygame.event.get():
# check for closing window
if event.type == pygame.QUIT:
if self.playing:
self.playing = False
self.running = False
if event.type == pygame.KEYDOWN:
if self.player.speedx == 0 and self.player.speedy == 0:
if event.key == pygame.K_LEFT:
self.player.speedx = -48
if event.key == pygame.K_RIGHT:
self.player.speedx = 48
if event.key == pygame.K_UP:
self.player.speedy = -48
if event.key == pygame.K_DOWN:
self.player.speedy = 48
# [...]
另一种选择是按下 a 键时重置速度:
for event in pygame.event.get():
# check for closing window
if event.type == pygame.QUIT:
if self.playing:
self.playing = False
self.running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
self.player.speedx = -48
self.player.speedy = 0
if event.key == pygame.K_RIGHT:
self.player.speedx = 48
self.player.speedy = 0
if event.key == pygame.K_UP:
self.player.speedx = 0
self.player.speedy = -48
if event.key == pygame.K_DOWN:
self.player.speedx = 0
self.player.speedy = 48
两种实现的行为不同。虽然第一个实现不允许您在按下按键时更改方向,但第二个实现会立即更改方向。尝试两种方法并选择适合您需求的一种。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)