我目前正在制作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")
可悲的是,新代码不起作用,我不明白为什么。过去一周我做了很多研究和测试,没有任何成功。当我按下键时,玩家会跳起来,但当它接触地面时它不会再次跳跃。
我需要释放按键并再次按下以使玩家跳跃。 "跳跃按下"只有在我按下时才打印出来。
期待您的帮助:))
答案 0 :(得分:1)
您的代码在此处正确设置了jump_pressed
变量:
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
不是无。event.type
既不是KEYDOWN
也不是`KEYUP jump_pressed
为True,self.vspeed
为0。您必须将结构更改为
if event is not None:
if event.type == pygame.KEYDOWN:
if event.key in [pygame.K_UP, pygame.K_SPACE]:
jump_pressed = True
elif event.type == pygame.KEYUP:
if event.key in [pygame.K_UP, pygame.K_SPACE]:
jump_pressed = False
if jump_pressed and self.vspeed == 0:
self.vspeed = -(self.speed)*2
print("jump is pressed")
即使没有触发任何事件,也会执行jump_pressed
检查。
答案 1 :(得分:1)
问题可能是因为你在elif
循环中有最后for event
个问题。
你需要这样的东西:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key in (pygame.K_UP, pygame.K_SPACE):
jump_pressed = True
elif event.type == pygame.KEYUP:
if event.key in (pygame.K_UP, pygame.K_SPACE):
jump_pressed = False
# after `for` loop
if jump_pressed and self.vspeed == 0:
self.vspeed = -(self.speed)*2
print("jump is pressed")