gpt4 book ai didi

swift - 删除节点会导致保留循环

转载 作者:搜寻专家 更新时间:2023-10-31 22:57:46 24 4
gpt4 key购买 nike

在我的 scenekit 游戏中,节点是随机添加到场景中的。这些节点沿一个方向行进,直到它们经过所需的结束位置,然后它们将被删除。它们可以上下左右移动。 (我使用 node.runAction(SCNAction.repeatActionForever(SCNAction.moveBy(...)

下面是我用来检测节点何时超过其结束位置以便将其删除的方法。

我遇到的问题是,虽然这可行,但出于某种原因,它会导致 SCNActionMoveSCNActionRepeat 的保留周期。

我发现避免这种情况的唯一方法是在游戏结束后在 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)
}
}
}
}

SCNActionRepeat SCNActionMove

最佳答案

不是对您所问问题的直接回答,而是...

如何保留一个可重用节点池?不是在节点死亡时删除节点,而是将其 hidden 属性设置为 true 并将其添加到重用队列中。不要总是创建一个新节点,而是首先尝试使现有节点出队。

关于swift - 删除节点会导致保留循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42616994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com