创建SKShapeNodes数组。 Swift> Xcode 6

时间:2014-12-09 21:32:51

标签: swift sprite-kit

在swift中,下面的代码以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]))
}

1 个答案:

答案 0 :(得分:2)

所以你说得对,上面代码的问题是SKNode只能有一个父母。

您可以采取两种方法。

  1. 创建SKShapeNode
  2. 的数组
  3. 根据需要创建新的SKShapeNode
  4. 前者有一个限制,你需要密切关注你的总圈数,否则你将超出你的界限。如果删除项目,这也意味着要考虑它。后者具有在需要时生成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,以便不必处理数组中任何未完成的圆圈的任何管理。如果您删除了圈子并想要回收它们,这一点尤其重要。