我有一个使用 SceneKit 和 swift 构建的游戏。
我have已struggling至figure出how至solve我的problem .
我正在尝试找出如何在我的特定场景中检测节点接触。下图演示了我面临的问题...如果用户触摸任何黄色立方体,它都会突出显示整个黄色立方体链。底部的三个红色立方体和顶部的两个红色立方体也是如此。
游戏的工作方式是为用户提供一个立方体的形状。用户可以通过各种方式滑动形状来改变位置。立方体可能会出现或从场景中移除,因此立方体的位置可以轻松更改。最后,当用户滑动形状时,重力函数会将立方体拉向地面,因此,如果他们将下面的图像向右扭曲,那么它将最终成为一个全新的形状,其中大多数立方体都处于新位置。
这是我尝试过的:
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() })
}
}
我的代码的问题是它删除了所有与命中立方体颜色相同的立方体。
最佳答案
我不会使用 SceneKit API 来解决这个问题。
您有一个带有立方体的游戏,可以根据特定的限制进行排列。应用程序应该有每个立方体所在位置的模型(抽象表示),并且立方体的绘图只是该模型的 View 。涉及游戏玩法的所有内容,包括解析哪些立方体是相同颜色链的一部分,都应该在该抽象表示上完成,然后对立方体状态的任何更新都应该传播到 SceneKit 节点层次结构。
关于ios - 检测触摸节点任意一侧的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49754081/