【发布时间】:2016-02-03 23:28:13
【问题描述】:
我目前正在制作一个 2D 平台游戏,我希望玩家精灵在接触地面并且按下跳跃键时跳跃。
我在乞讨时得到了这个,发现它没有按照我的意愿做,我使用布尔值编写了一个新代码。
原码:
if not (event == None):
if (event.type == pygame.KEYDOWN):
if (event.key == pygame.K_UP or event.key == pygame.K_SPACE):
if (self.vspeed == 0):
self.vspeed = -(self.speed)*2
新代码:
if not (event == None):
if(event.type == pygame.KEYDOWN):
if (event.key == pygame.K_UP or event.key == pygame.K_SPACE):
jump_pressed = True
elif (event.type == pygame.KEYUP):
if (event.key == pygame.K_UP or event.key == pygame.K_SPACE):
jump_pressed = False
elif (jump_pressed == True and self.vspeed == 0):
self.vspeed = -(self.speed)*2
print("jump is pressed")
很遗憾,新代码不起作用,我不明白为什么。在过去的一周里,我做了很多研究和测试,但没有任何成功。当我按键时玩家会跳跃,但是当它触地时它不会再次跳跃。
我需要松开按键并再次按下才能让玩家跳跃。只有当我按下时才会打印“按下跳转”。
期待您的帮助:)
【问题讨论】:
-
不要使用
event == None与None进行比较,而是使用event is None(或者,在这种情况下为event is not None)。 -
此外,Python 样式在
if条件中避开括号。 -
你为什么要检查
if not (event == None):- 你没有for event in pygame.event.get()自动检查吗? -
在Program Arcade Games With Python And Pygame 上更好地分析
Platformer examples的代码(在本页末尾) -
问题可能是因为你有最后一个
elif在for event循环内。