我有一个使用SceneKit和swift构建的游戏。
我have已struggling figure how solve problem 我的。
我试图弄清楚如何检测在我的特定场景中触摸的节点。下面的图片展示了我面临的问题......如果用户触摸了黄色立方体的任何,它将突出显示整个黄色立方体链。底部的三个红色立方体和顶部的两个红色立方体相同。
游戏的工作方式是给用户一个立方体的形状。通过用户以各种方式滑动,形状可以改变位置。立方体可能会出现或从场景中移除,因此立方体的位置可以轻松更改。最后,当用户滑动形状时,重力功能会将立方体拉到地面,因此如果它们将图像扭曲到右侧,那么它将最终成为一个全新的形状,大多数立方体处于新的位置。 / p>
以下是我的尝试:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first!
let location = touch.location(in: gameView)
let hitList = gameView.hitTest(location, options: nil)
if let hitObject = hitList.first {
let node = hitObject.node
//This is where I'm trying to detect the nodes and remove them
gameScene.rootNode.childNodes.filter({ $0.name == node.color }).forEach({ $0.removeFromParentNode() })
}
}
我的代码存在的问题是它删除了与匹配多维数据集颜色相同的多维数据集的所有。
答案 0 :(得分:2)
我不会使用SceneKit API来解决这个问题。
你有一个可以根据特定约束排列的立方体游戏。应用程序应该具有每个多维数据集所在的模型(抽象表示),并且多维数据集的绘图只是该模型的视图。涉及游戏玩法的所有内容,包括解析哪些多维数据集是同一颜色链的一部分,都应在该抽象表示上完成,然后对多维数据集状态的任何更新都应传播到SceneKit点头层次结构。