使用 SpriteKit 一次移动多个节点 [英] Moving multiple nodes at once from touch with SpriteKit

查看:17
本文介绍了使用 SpriteKit 一次移动多个节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个游戏,它有 3 个 SKSpriteNodes,用户可以使用 touchesBegantouchesMoved 四处移动.但是,当用户移动 nodeA 并经过另一个名为 nodeB 的节点时,nodeB 会跟随 nodeA 等等.

I have a game that has 3 SKSpriteNodes that the user can move around using the touchesBegan and touchesMoved. However, when the users moves nodeA and passes another node called nodeB, nodeB follows nodeA and so on.

我创建了一个 SKSpriteNodes 数组,并使用 for-loop 让生活更轻松.

I created an array of SKSpriteNodes and used a for-loop to make life easier.

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


        let nodes = [nodeA, nodeB, nodeC]

        for touch in touches {

            let location = touch.location(in: self)

            for node in nodes {

                if node!.contains(location) {

                    node!.position = location
                }

            }


        }

    }

除了 nodeA 移动并与 nodeB 交叉路径时,一切正常,nodeB 跟随 nodeA.

Everything is working except when nodeA is moving and cross paths with nodeB, nodeB follows nodeA.

我怎样才能使当用户移动 nodeA 并且 nodeA 通过 nodeBnodeB 不会跟随 nodeA.

How can I make it so that when the user is moving nodeA and nodeA passes through nodeB that nodeB would not follow nodeA.

推荐答案

不要进行缓慢的搜索,而是为您触摸的节点设置一个特殊的节点变量

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
        }
    }
}

这篇关于使用 SpriteKit 一次移动多个节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆