2017-08-09 76 views
3

我已经为我的玩家实现了单跳。但是如果用户点击两次,我希望玩家能够加倍跳跃。让玩家双跳Sprite Kit Swift

我该如何让这个功能在下面检查跳跃是否仍然持续,以便他们可以在需要时再次点击跳跃?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    var isJumping = false 
    var isDoubleJumping = false 

    if mario.action(forKey: "jump") == nil && isJumping { 

     let marioTextureJump = SKTexture(imageNamed: "mariojump.png") 

     let animation = SKAction.animate(with: [marioTextureJump], timePerFrame: 0.6) 

     mario.run(animation) 

     mario.run(jumpAction, withKey: "jump") 

     if isJumping { 

      isDoubleJumping = true 
      isJumping = false 
     } 

     else { 

      isJumping = true 
      isDoubleJumping = false 
     } 
    } 
} 

回答

3

实现,这可能是只加2个标志到现场

isPlayerJumping = false 
isPlayerDoubleJumping = false 

,然后检查并设定这些变量在你触摸FUNC

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent { 

    //if the player is already double jumping don't let them jump again until finished 
    guard !isDoubleJumping else { return } 

    let animation = SKAction.animate(with: [playerTextureJump], timePerFrame: 0.6) 

    player.run(animation) 

    if isJumping { 
     isDoubleJumping = true 
     isJumping = false 

     player.run(jumpAction, withKey: "jump") { 
      self.isDoubleJumping = false 
     } 
    } 
    else { 
     isJumping = true 

     player.run(jumpAction, withKey: "jump") { 
      self.isJumping = false 
     } 
    } 
} 
最简单的方法

编辑

如果你不想使用守护你可以把一个if statement到位

if isPlayerDoubleJumping { 
    return 
} 

在你jumpAction结束时,你必须运行的代码块重置变量

SKAction.run { 
    isJumping = false 
    isDoubleJumping = false 
} 

你甚至可以改变你的触摸内联变量开始像这样...

player.run(jumpAction, withKey: "jump") { 
    self.isPlayerJumping = false 
    self.isPlayerDoubleJumping = false 
} 
+0

我没有一个球员类,所以这将无法正常工作。你可以编辑你的答案来解决这个问题吗?谢谢 –

+0

编辑了回答,说明了这个问题 –

+0

我很抱歉,但我仍然无法正确理解。我从来没有使用过警卫,所以我不知道这是如何工作的。我编辑了我的代码,告诉你我在哪里。 –