2017-08-09 78 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

我很抱歉,但我仍然無法正確理解。我從來沒有使用過警衛,所以我不知道這是如何工作的。我編輯了我的代碼,告訴你我在哪裏。 –