Pygame精灵用按键跳跃

时间:2016-02-03 15:09:29

标签: python pygame keypress

我目前正在制作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")

可悲的是,新代码不起作用,我不明白为什么。过去一周我做了很多研究和测试,没有任何成功。当我按下键时,玩家会跳起来,但当它接触地面时它不会再次跳跃。

我需要释放按键并再次按下以使玩家跳跃。 "跳跃按下"只有在我按下时才打印出来。

期待您的帮助:))

2 个答案:

答案 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")

(几乎)永远不会是真的:在这种情况下进入的唯一方法是

  1. event不是无。
  2. event.type既不是KEYDOWN也不是`KEYUP
  3. jump_pressed为True,self.vspeed为0。
  4. 您必须将结构更改为

    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")