在SpriteKit中添加基本的左右点击并按住控件时遇到问题

时间:2018-10-14 03:18:18

标签: swift xcode sprite-kit uigesturerecognizer

因此,我实质上想要实现的是在SpriteKit游戏中触摸并按住控件。我想拥有一个可以让用户在游戏中将玩家对象从左到右前后移动的位置,具体取决于用户所握住的屏幕的哪一侧。另外,当用户不再握住一侧或另一侧时,我希望播放器自然返回场景中心。例如,如果用户触摸并保持其触摸在屏幕的左侧,则播放器向该侧移动。但是,如果用户放开或触摸屏幕的另一侧,我希望播放器相应地移动到中心或另一侧。

虽然我可以使用下面的代码获得某些结果,但我遇到了一些错误。

我明确希望播放器必须同时触摸和按住屏幕的右侧或左侧,而这不能同时发生。

有时,播放器会出现故障并返回中心,并出现关于触摸识别器无法评估调试器中显示的触摸的错误。

有什么想法可以解决我的代码并达到预期的效果吗?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first!
    if player.contains(touch.location(in: self)) {
        if state == .inactive {
            startGame()
        }
    } else if touch.location(in: self).x < 0 {
        if state == .active {
            holdingRightControl = false
            holdingLeftControl = true
        }
    } else if touch.location(in: self).x > 0 {
        if state == .active {
            holdingLeftControl = false
            holdingRightControl = true
        }
    }
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    if state == .active {
        holdingLeftControl = false
        holdingRightControl = false
    }
}

override func update(_ currentTime: TimeInterval) {
    if holdingLeftControl == true {
        let moveLeftward: SKAction = SKAction.moveTo(x: -240, duration: getDuration(start: player.position.x, end: -240))
        player.run(moveLeftward)
    } else if holdingRightControl == true {
        let moveRightward: SKAction = SKAction.moveTo(x: 240, duration: getDuration(start: player.position.x, end: 240))
        player.run(moveRightward)
    } else {
        let reCenter: SKAction = SKAction.moveTo(x: 0, duration: getDuration(start: player.position.x, end: 0))
        player.run(reCenter)
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定,但是尝试一下可能会改变线路

let touch = touches.first!

进入

for touch in touches { }

这应该可以帮助您找到所有的接触点。

查找数组中的最后一个内容可能也有帮助。

我不知道精灵会向中心移动,但是也许您可以在任何地方更改精灵的位置。

希望对您有帮助,祝您好运!