我在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)
这也不起作用。
谢谢。
答案 0 :(得分:1)
不幸的是,我没有足够的声誉来评论你的原始问题,所以这可能不是一个回答"本身,但我会尝试和诊断我的想法,希望你能为我清理一些观点。
您尝试从if语句中的父视图中删除的covernode1
可能与您在调用addChild(covernode1)
我认为情况就是这样,因为当你说你正在使用covernode1.position = CGPointMake(-100.0, -600.0)
并且它仍然不起作用时,这让我觉得这是一个完全不同的SKNode对象。
相反,尝试将函数外部的covernode1
声明为类变量。这样,当您实际实例化它并在函数中引用它时,它会抓取您正在寻找的正确节点。如果有任何帮助,请告诉我。当我从你的回复中了解更多时,我会编辑答案。
此外,您的button1
和button2
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])
}