Swift中非常基本的节点删除

时间:2015-05-28 18:56:21

标签: swift skspritenode removechild

我在swift中发现了一些关于节点删除的其他问题,但它们似乎都与我的问题无关。

我只想删除基本节点,例如:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent){

let covernode1 = SKSpriteNode(imageNamed: "tester")

covernode1.position = CGPointMake(100.0, 600.0)

for touch: AnyObject in touches {

if self.nodeAtPoint(location) == self.fake {

button1++
button2++
}

if(button1 == 1 && button2 == 1){

addChild(covernode1)

}

if(button1 == 2 && button2 == 2){
//THIS IS WHERE I WANT TO REMOVE THE NODE
}

我试过了

covernode1.removeFromParent() 

但无济于事。

代码运行addChild部件很好,但删除似乎是一个问题。我甚至尝试过改变节点的位置,使其不在屏幕上,例如

covernode1.position = CGPointMake(-100.0, -600.0)

这也不起作用。

谢谢。

3 个答案:

答案 0 :(得分:1)

不幸的是,我没有足够的声誉来评论你的原始问题,所以这可能不是一个回答"本身,但我会尝试和诊断我的想法,希望你能为我清理一些观点。

您尝试从if语句中的父视图中删除的covernode1可能与您在调用addChild(covernode1)

时添加到视图的节点不同

我认为情况就是这样,因为当你说你正在使用covernode1.position = CGPointMake(-100.0, -600.0)并且它仍然不起作用时,这让我觉得这是一个完全不同的SKNode对象。

相反,尝试将函数外部的covernode1声明为类变量。这样,当您实际实例化它并在函数中引用它时,它会抓取您正在寻找的正确节点。如果有任何帮助,请告诉我。当我从你的回复中了解更多时,我会编辑答案。

此外,您的button1button2 vars最初是否设为1?

编辑:另一个问题:在致电.removeFromParent()时是否收到任何错误,或者只是"没有做任何事情"?

答案 1 :(得分:0)

你可以做的一件简单的事情(作弊但会起作用)是使用

来隐藏节点
covernode1.hidden = true

注意

还要确保if语句实际运行,因为我不知道为什么你尝试过的东西不起作用。要对此进行测试,请在println("log")块中放置if

希望有所帮助:)

答案 2 :(得分:0)

从button1和button2,我认为您正在尝试这样做:在第一次单击时,您添加一个SKNode。在第二次单击时,您要删除SKNode。 因此,在第二次单击时,let covernode1 = SKSpriteNode(imageNamed: "tester")是一个不同的实例,尽管它具有相同的变量名称!因此,第二次单击时的实例不可删除,因为它没有添加到任何内容。

试试这个,

if(button1 == 1 && button2 == 1){
    addChild(covernode1)
    self.tempChildCount = count(self.children) //tempChildCount is an integer
}

if(button1 == 2 && button2 == 2){
    let childNode = self.children[self.tempChildCount - 1 ] as! SKNode
    self.removeChildrenInArray([childNode])
}