在didMoveToView()中,以一定的速度(每秒2次)调用下面的代码。每次调用此函数时,屏幕上都会出现一个新的循环代码。但是,当尝试添加第二个错误时,它将抛出一个错误:尝试添加已经有父级的sknode,而不是不断地添加它们。我发现您不能在同一个视图上创建一个重复的节点。得到这个结果后,我得出结论,我需要创建一个SKShapeNodes数组,因此每当函数被调用时,它都会从数组中取出一个,并将其添加到视图中。在我的示例中,当节点到达底部(y = -20)时,它将需要删除该节点,并使其再次可用。
那么,我的问题是:如何制作一个SKShapeNode的数组,所以当调用下面的函数时,它将接受一个新的节点并将其显示到视图中?此外,当节点退出视图时,将需要再次使节点可用以供使用。
let circlenode = SKShapeNode(circleOfRadius: 25) //GLOBAL
func thecircle() {
circlenode.strokeColor = UIColor.whiteColor()
circlenode.fillColor = UIColor.redColor()
let initialx = CGFloat(20)
let initialy = CGFloat(1015)
let initialposition = CGPoint(x: initialx, y: initialy)
circlenode.position = initialposition
self.addChild(circlenode)
let action1 = SKAction.moveTo(CGPoint(x: initialx, y: -20), duration: NSTimeInterval(5))
let action2 = SKAction.removeFromParent()
circlenode.runAction(SKAction.sequence([action1, action2]))
}发布于 2014-12-10 02:55:56
所以你是对的,上面的代码的问题是一个SKNode只能有一个父程序。
你有两条路可以走。
SKShapeNode的数组SKShapeNode前者有一个约束,即你需要保持对你的圆圈总数的关注,否则你就会超出你的界限。如果您删除项目,这也意味着说明它。后者具有在需要时生成SKShapeNode的开销。更有可能的是,这不会是一个问题。
要创建数组,您可以执行如下操作(选项1):
var circleArray:[SKShapeNode] = [SKShapeNode]() // Property in your class
// Code in your init or wherever else you want, depending on what class this is.
// 10 is just an arbitrary number
for var i=0;i<10;i++ {
circleArray.append(SKShapeNode(circleOfRadius: 25))
}当您想要将它添加到您的thecircle中时,您要在其中调用self.addChild(circlenode),如下所示:
if numCircles < circleArray.count {
SKShapeNode *circlenode = circleArray[numCircles]
// Do other initialization here
self.addChild(circlenode)
numCircles++
}或者你可以这样做(备选方案2):
SKShapeNode *circlenode = SKShapeNode(circleOfRadius: 25)
// Do other initialization here
self.addChild(circle node)为了不需要处理数组中许多杰出的圆圈的管理,我可能会做选项2。这是特别重要的,如果你曾经删除圆圈,并想回收他们。
https://stackoverflow.com/questions/27389245
复制相似问题