我想在我点击场景中的按钮时删除 Sprite 。该按钮仅在玩家与元素发生碰撞时启用。这是添加和删除 Sprite 的代码:
var imageShown = false
var imageForRiddle = SKSpriteNode()
func buttonAPressedForItem(item: WorldItem){
if item.riddleImage != ""{
imageForRiddle = SKSpriteNode(texture: SKTexture(imageNamed: item.riddleImage), color: .clear, size: CGSize(width: self.frame.size.width / 2, height: self.frame.size.height / 2))
if !imageShown{
imageForRiddle.position = player.position
imageForRiddle.zPosition = 150
self.addChild(imageForRiddle)
imageShown = true
print("Sprite added!")
}
else{
imageForRiddle.removeFromParent()
imageShown = false
print("Sprite removed!")
}
}
行为应该是,如果我触摸按钮,图像就会显示出来。如果我再次触摸按钮,图像就会消失。但唯一发生的事情是当我点击按钮时图像出现但从未被删除。当我点击 3 次时,我看到图像 3 次。两个打印语句都被执行,所以 imageForRiddle.removeFromParent
肯定被调用了。
有谁知道这里的问题是什么?
最佳答案
您在每次点击时创建了一个新的 imageForRiddle:
imageForRiddle = SKSpriteNode(texture: SKTexture(imageNamed: item.riddleImage), color: .clear, size: CGSize(width: self.frame.size.width / 2, height: self.frame.size.height / 2))
因此,您正在制作一个新图像,然后将其删除(但是,它从未添加过,因此被忽略)。
您需要使用您制作的属性来存储图像,并确保只制作一个并删除和添加完全相同的对象。
类似于:
var imageForRiddle: SKSpriteNode? = nil
然后,
if imageForRiddle = nil {
imageForRiddle = SKSpriteNode(texture: SKTexture(imageNamed: item.riddleImage), color: .clear, size: CGSize(width: self.frame.size.width / 2, height: self.frame.size.height / 2))
}
然后在使用时打开 imageForRiddle。
关于ios - removeFromParent 不适用于 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46933608/