シーンキットゲームでは、シーンにランダムにノードが追加されます。これらのノードは、目的の終了位置を過ぎるまで一方向に移動してから削除されます。彼らは上下、左右に移動することができます。 (私はnode.runAction(SCNAction.repeatActionForever(SCNAction.moveBy(...
を使用します)ノードを削除すると保存サイクルが発生する
以下は、ノードが終了位置を過ぎて削除できるようになったときに検出したものです。
私が午前問題は、これは動作しますが、何らかの理由でそれがSCNActionMoveとSCNActionRepeatで保持サイクルを引き起こしている、です。
これを避ける唯一の方法は、ゲームが終了した後にforループですべてのノードを一度に削除することですが、ゲームを長時間再生できるので理想的ではありません。
ありがとうございます!
func renderer(renderer: SCNSceneRenderer, updateAtTime time: NSTimeInterval) {
// If any nodes have been spawned
if spawnedNodeArray.count > 0 {
// Get the first spawned node
let node = rootNode.childNodeWithName(spawnedNodeArray[0].nodeName, recursively: true)!
// If node is moving RIGHT, check if node has reached end position
if spawnedNodeArray[0].Direction == "RIGHT" {
// If node has reached past end position...
if node.position.x >= Float(spawnedNodeArray[0].EndXPos) {
node.removeAllActions()
node.removeFromParentNode()
spawnedNodeArray.removeAtIndex(0)
}
}
// If node is moving LEFT, check if node has reached end position
else if spawnedNodeArray[0].Direction == "LEFT" {
// If node has reached past end position...
if node.position.x <= Float(spawnedNodeArray[0].EndXPos) {
node.removeAllActions()
node.removeFromParentNode()
spawnedNodeArray.removeAtIndex(0)
}
}
// If node is moving DOWN, check if node has reached end position
else if spawnedNodeArray[0].Direction == "DOWN" {
// If node has reached past end position...
if node.position.z >= Float(spawnedNodeArray[0].EndZPos) {
node.removeAllActions()
node.removeFromParentNode()
spawnedNodeArray.removeAtIndex(0)
}
}
// If node is moving UP, check if node has reached end position
else if spawnedNodeArray[0].Direction == "UP" {
// If node has reached past end position...
if node.position.z <= Float(spawnedNodeArray[0].EndZPos) {
node.removeAllActions()
node.removeFromParentNode()
spawnedNodeArray.removeAtIndex(0)
}
}
}
}
グレートの提案、私はこれを試してみるだろう。ありがとう! – P3rry