Moving multiple nodes at once from touch with SpriteKit

不打扰是莪最后的温柔 提交于 2019-12-02 06:51:12

Instead of doing slow searches, have a special node variable for your touched node

class GameScene
{
    var touchedNodeHolder : SKNode?

    override func touchesBegan(.....)
    {
        for touch in touches {
            guard touchNodeHandler != nil else {return} //let's not allow other touches to interfere
            let pointOfTouch = touch.location(in: self)
            touchedNodeHolder = nodeAtPoint(pointOfTouch)
        }
    }
    override func touchesMoved(.....)
    {
        for touch in touches {

            let pointOfTouch = touch.location(in: self)
            touchedNodeHolder?.position = pointOfTouch
        }
    }
    override func touchesEnded(.....)
    {
        for touch in touches {

            touchedNodeHolder = nil
        }
    }
}

After some experimenting, I found a way to go about this problem.

Instead of selecting the node by the position of the touch, I found that selecting the node by its name property did the trick.

The code shown is implemented inside the touchesMoved and touchesBegan methods

//name of the nodes
    let nodeNames = ["playO", "playOO", "playOOO", "playX", "playXX", "playXXX"]
//the actual nodes
    let player = [playerO, playerOO, playerOOO, playerX, playerXX, playerXXX]

        for touch in touches {

            let pointOfTouch = touch.location(in: self)
            let tappedNode = atPoint(pointOfTouch)
            let nameOfTappedNode = tappedNode.name

            for i in 0..<nodeNames.count {

                if nameOfTappedNode == nodeNames[i] {
                    z += 1
                    player[i]!.zPosition = CGFloat(z)
                    print(player[i]!.zPosition)
                    player[i]!.position = pointOfTouch
                }
            }

        }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!