如何将多个节点添加到场景并一次移动所有节点。迅速。精灵套件

时间:2015-05-08 21:06:12

标签: ios swift sprite-kit

我是swift和spriteKit的新手。我正在创建一个侧滚动游戏。我想让它在任何高度从屏幕右侧添加多个节点(称为Impenitrible)并向左移动。我创建“Impenitrible”节点的功能是:

func spawnImpenitrible(){
   Impenitrible.physicsBody = SKPhysicsBody(rectangleOfSize: Impenitrible.size)
           let actionDone =  SKAction.removeFromParent()
    var MinValue = sand.size.height
    var MaxValue = self.size.height - Impenitrible.size.height / 2
    var spawnPoint = UInt32(MaxValue - MinValue)
    Impenitrible.position = CGPoint(x: self.size.width - 60 , y: CGFloat(arc4random_uniform(spawnPoint)))

    Impenitrible.physicsBody?.categoryBitMask = physicsCategory.impenitrible
    Impenitrible.physicsBody?.contactTestBitMask = physicsCategory.sub
    Impenitrible.physicsBody?.affectedByGravity = false
    Impenitrible.physicsBody?.dynamic = true
    self.addChild(Impenitrible)


}

我用以下方法调用此函数:

var impenitribleTimer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("spawnImpenitrible"), userInfo: nil, repeats: true)

我通过从“更新”功能中的x位置减去一个数字来移动它。

添加Impenitrible曾经很好。但是一旦它再次调用该函数,应用程序崩溃的错误为:
     由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'尝试添加已有父级的SKNode 我哪里做错了?任何帮助都会很棒!谢谢。

1 个答案:

答案 0 :(得分:0)

首先,我想指出您的代码行:let actionDone = SKAction.removeFromParent()实际上没用,因为您从不致电runAction来使用它。

错误消息很好地总结了它。 "尝试添加已有父母"的SKNode。你实际上从未打电话给removeFromParent()

添加Impenitrible一次就可以正常工作了,因为在开始时,Impenitrible没有父级。后续调用将发生冲突,因为Impenitrible已经拥有通过第一次调用添加的父级。

快速而肮脏的解决方法是在runAction(SKAction.removeFromParent())的下一次调用之前执行spawnImpenitrible,在某处,引用Imprenitrible