Обнаружение проблем с добавлением базовых элементов управления SpriteKit влево и вправо. - PullRequest
0 голосов
/ 14 октября 2018

Так что, по сути, я пытаюсь выполнить управление касанием и удержанием в моей игре 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 голосов
/ 14 октября 2018

Я не уверен, но можно попробовать изменить строку

let touch = touches.first!

на

for touch in touches { }

. Это должно помочь вам найти все прикосновения.

Также может помочь нахождение последней вещи в массиве.

Я не знаю, как спрайт смещается к центру, но, возможно, вы могли бы найти его везде, где вы меняете местоположение спрайта..

Надеюсь, это поможет и удачи!

...