0
誰かがボックスをタップして消滅させるゲームを作成しようとしています。私の問題は、ゲームを再起動して、以前隠された/削除されたすべてのボックスを再追加することです。シーンキット(Swift):非表示/削除されたノードを再表示または再追加
私はそうのようなボックスの行を作成します。私は、x、yおよびコースのZの位置を更新
func addBoxes() {
for _ in 0..<5 {
let sphereGeometry = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0)
let sphereNode: SCNNode! = SCNNode(geometry: sphereGeometry)
sphereNode.position = SCNVector3(x: x, y: y, z: z)
scnScene.rootNode.addChildNode(sphereNode)
}
た後。
このすべてが美しく動作しますが、私はそうのようなタップボックスを非表示:すべてのボックスをタップし、隠された後
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first!
let location = touch.location(in: scnView)
let hitResults = scnView.hitTest(location, options: nil)
if let result = hitResults.first {
let node = result.node
node.isHidden = true
}
}
、ゲームは単に今のリセットので、すべてのボックスを再表示する必要があります
func newGame() {
// I've tried this and various versions of it, with no success
for child in scnScene.rootNode.childNodes {
child.isHidden = false
}
}
しかし、これは私を与える:
fatal error: unexpectedly found nil while unwrapping an Optional value
私もchild.removeFromParentNode()
と目を試してみましたシーンにノードを再追加しようとしましたが、これは同じエラーをスローします。
誰でも正しい方向に向けることができますか? forループで作成された1つまたはすべてのノードの表示を解除するにはどうすればよいですか?
例外ブレークポイントを追加して、クラッシュする正確な行を取得できますか?あなたのコードにはオプションが全く表示されません。あるいは、 'scnScene'が' SCNScene! 'と宣言されていますか? – orangenkopf
@ orangenkopf:はい、そうです。 'scnScene.rootNode.addChildNode(sphereNode)'でクラッシュします。 – Harold
'SCNNode(geometry:)'はオプションではないので、型 'SCNNode'を削除してコンパイラにタイプを推論させます。しかし、あなたの問題は隠れ/隠れとは関係ありません。むしろ、ノードをノードに追加しようとするとシーンが作成されていない可能性があります。 – orangenkopf