使玩家在Sprite Kit Swift中进行双重跳跃

3

我已经为我的玩家实现了单次跳跃。但是,如果用户点击两次,我希望玩家能够进行双重跳跃。

如何使下面的函数检查跳跃是否仍在持续中,以便他们可以再次点击并跳跃?

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
        }
    }
}
1个回答

3
最简单的方法可能是在你的场景中添加2个标记。
isPlayerJumping = false
isPlayerDoubleJumping = false

然后在你的touches函数中检查并设置这些变量。

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语句。
if isPlayerDoubleJumping {
    return
}

在你的jumpAction结束时,你需要运行一段代码块来重置变量。
SKAction.run {
    isJumping = false
    isDoubleJumping = false
}

你甚至可以在触摸开始时内联更改变量,像这样...
player.run(jumpAction, withKey: "jump") {
    self.isPlayerJumping = false
    self.isPlayerDoubleJumping = false
}

我没有一个玩家类,所以这个不会起作用。你能编辑一下你的回答来解决这个问题吗?谢谢! - Jack Richards
守卫语句只是一个花哨的“if语句”,我已经调整了我的答案以展示它们之间的区别。 - Ron Myschuk
完美。现在运行得很好!谢谢! - Jack Richards
太棒了!祝你在游戏中好运! - Ron Myschuk
你需要更新你的代码以便让我看到发生了什么。只需将其添加到底部,不要删除原始代码。 - Ron Myschuk
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接