Pygame 精灵用按键跳跃
Pygame sprite jump with pressed key
我目前正在制作 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")
遗憾的是,新代码不起作用,我不明白为什么。在过去的一周里,我做了很多研究和测试,但都没有成功。当我按下按键时播放器会跳起来,但是当它接触到地面时它不会再跳起来。
我需要松开按键并再次按下才能让玩家跳跃。 "jump is pressed" 仅在按下时打印。
期待您的帮助:)
您的代码在此处正确设置了 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
不是 None.
event.type
既不是 KEYDOWN
也不是`KEYUP
jump_pressed
为真,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
检查即使在没有事件被触发时也会执行。
问题可能是因为您在 for event
循环中有最后一个 elif
。
你需要这样的东西:
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")
我目前正在制作 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")
遗憾的是,新代码不起作用,我不明白为什么。在过去的一周里,我做了很多研究和测试,但都没有成功。当我按下按键时播放器会跳起来,但是当它接触到地面时它不会再跳起来。
我需要松开按键并再次按下才能让玩家跳跃。 "jump is pressed" 仅在按下时打印。
期待您的帮助:)
您的代码在此处正确设置了 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
不是 None.event.type
既不是KEYDOWN
也不是`KEYUPjump_pressed
为真,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
检查即使在没有事件被触发时也会执行。
问题可能是因为您在 for event
循环中有最后一个 elif
。
你需要这样的东西:
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")