2015-10-02 138 views
1

我正在Swift上开发一款小游戏,并且我一直在努力。在这个自定义类中,我使用了touchesBegan方法,并且在此方法中我想创建一个SkNode。这是我的代码:在哪里添加孩子?

class TouchableSpriteNode : SKSpriteNode 

    { 


    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

     self.removeFromParent() 
     let delay = Int(arc4random_uniform(UInt32(200)))*Int(NSEC_PER_SEC)/100 
     let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 
     dispatch_after(time, dispatch_get_main_queue()) { 
      let random2 = arc4random_uniform(UInt32(self.frame.size.width)) 
      let random3 = arc4random_uniform(UInt32(self.frame.size.height)) 

      div.position = CGPoint(x: Int(random2), y: Int(random3)) 
      self.addChild(div) 
     } 
     } 
} 

的问题是,我不能让它显示在屏幕上,因为我得到它说,你不能说孩子,因为这是他自己的父(这是复杂的错误),我想知道的事情是我怎么能说增加孩子到现场,而不是这个skspritenode? 任何帮助表示赞赏!谢谢

+0

你可以发布“复杂”的错误? :) –

+0

错误并不复杂,为什么这个类是SKSpriteNode的父类是复杂的.. –

+0

你究竟在哪里声明'div'?如果你想添加'div'的多个实例,声明应该在你的函数中。否则,它会尝试重新添加已添加的节点(而不是添加节点的新实例),从而导致错误。这是怎么回事? –

回答

1

我要写这个没有测试,但它应该工作:就在你打电话self.removeFromParent()之前添加行parent = self.parent;然后使用parent.addChild(div)而不是self.addChild(div)

这是否有窍门?

1

这不会是你正在寻找的答案,但我不确定你可以从另一个类中添加一个节点到你的视图控制器。对于这种情况,我建议在视图控制器中执行touchesBegan,并在该功能内部检测触摸是否发生在您的可触摸节点上。然后,您可以轻松地从视图中添加和删除对象。

+0

哦,很高兴知道!谢谢。 –