Событие касания не приводит к тому, что spritenode сбрасывает свой размер, когда перемещается за пределы узла - PullRequest
0 голосов
/ 03 ноября 2018

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

Я пытался использовать несколько вещей в разделе кода с перемещением штрихов, чтобы попытаться вернуть его к исходному размеру после того, как я переместил палец за пределы узла, удерживая касание, но это не сработало , Мой код ниже

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    let touch: UITouch = touches.first!
    let node = self.atPoint(touch.location(in: self))
    let pushdown = SKAction.scale(to: 0.8, duration: 0.1)

    if node == mainMenu.settingsButton {
        node.run(pushdown)

    } else if node == mainMenu.viewMapButton {
        node.run(pushdown)

    }else if node == mainMenu.shopButton {
        node.run(pushdown)
    }

}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

    let touch: UITouch = touches.first!
    var location: CGPoint = touch.location(in: self)
    let node: SKNode = atPoint(location)
    let pushUp = SKAction.scale(to: 1.0, duration: 0.2)

    if node != mainMenu.settingsButton {
        //node.run(pushUp)

    } else if touch.phase == .moved || touch.phase == .cancelled {

        node.run(pushUp)

    }

}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

    let touch: UITouch = touches.first!
    let node = self.atPoint(touch.location(in: self))
    let pushUp = SKAction.scale(to: 1.0, duration: 0.2)

    if node == mainMenu.settingsButton {
        node.run(pushUp)
        //Run Sound Here

        let scene = SettingsMenu(fileNamed:"SettingsMenu")
        scene?.scaleMode = .aspectFill
        //scene?.backgroundColor = UIColor.lightGray
        let transition = SKTransition.crossFade(withDuration: 0.5)
        self.scene?.view?.presentScene(scene!, transition: transition)

    } else if node == mainMenu.viewMapButton {
        node.run(pushUp)
    }
}

Как мне вернуть его к исходному размеру после того, как я переместил палец за пределы расположения узлов, удерживая касание?

1 Ответ

0 голосов
/ 03 ноября 2018

В touchShegan, touchesMoved, touchsEnded вы всегда ссылаетесь на текущий узел в точке. let node = self.atPoint(touch.location(in: self)) Почему бы не сохранить ссылку на начальный узел, который был обнаружен в touchesBegan, чтобы уменьшить его, если текущий узел atPoint не равен начальному. Я полагаю, это решит вашу проблему.

EDIT:

Для захвата узла при первом касании ...

private var currentTouchedNode : SKNode?

    override func touchesBegan(_ touches: Set, with event: UIEvent?) {

        let touch: UITouch = touches.first!
        currentTouchedNode = self.atPoint(touch.location(in: self))
        let pushdown = SKAction.scale(to: 0.8, duration: 0.1)

        if currentTouchedNode == mainMenu.settingsButton {
            currentTouchedNode.run(pushdown)

        } else if currentTouchedNode == mainMenu.viewMapButton {
            currentTouchedNode.run(pushdown)

        }else if currentTouchedNode == mainMenu.shopButton {
            currentTouchedNode.run(pushdown)
        }

    }

В touchesMoved, touchesEnded вы сравниваете, если текущий узел равен currentTouchedNode, и изменяете его размер при необходимости

...