SpriteKit - 快速触摸会导致错误的行为

时间:2018-01-28 17:35:33

标签: ios sprite-kit touch

我目前正在使用sidescroller游戏,其中跳跃高度取决于玩家按下屏幕右半部分的时间。 除非用户快速触摸屏幕,否则一切正常。这导致跳跃尽可能大。

我做错了什么或者这只是SpriteKit工作方式的问题? 我该如何解决这个问题?

编辑:以下是我游戏中处理触摸的所有方法:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
{
    for touch in touches
    {
        swiped = false

        let location = touch.location(in: cameraNode)

        DispatchQueue.main.asyncAfter(deadline: .now() + 0.065)
        {
            if self.swiped == false
            {
                if location.x < 0
                {
                    self.changeColor()
                }
                else
                {
                    self.jump()
                }
            }
        }
    }

}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)
{
    for touch in touches {
        let location = touch.location(in: cameraNode)

            if location.x > 0
            {
                // Right
                thePlayer.endJump()
            }
    }
}

然后还有一个手势识别器处理左右滑动,使用以下处理程序:

    @objc func swipedRight()
{
        if walkstate != .walkingRight
        {
            walkstate = .walkingRight
        }
        else
        {
            boost(direction: 0)
        }

        swiped = true
}

@objc func swipedLeft()
{

        if walkstate != .walkingLeft
        {
            walkstate = .walkingLeft
        }
        else
        {
            boost(direction: 1)
        }

        swiped = true
}

希望这足以描述问题。上面的代码是我正在处理触摸的一切。

1 个答案:

答案 0 :(得分:0)

嗯,问题是,我使用 DispatchQueue 命令在短暂延迟后调用跳转方法,以防用户滑动而不点击。因此, touchesEnded 方法在跳转开始之前被调用,因此无法再停止。

为了解决这个问题,我添加了一个布尔变量,一旦玩家触摸屏幕就设置为true,并在用户手指离开屏幕时设置为false。为了跳跃,必须将此变量设置为true,从而在快速触摸后角色不会跳跃。