removeFromParent不适用于SKSpriteNode

时间:2017-10-25 13:21:56

标签: ios swift sprite-kit skspritenode

我想点击场景中的按钮时删除精灵。该按钮仅在玩家与某个项目发生碰撞时启用。这是添加和删除精灵的代码:

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次。两个print语句都被执行,因此imageForRiddle.removeFromParent肯定被调用。

有谁知道这里有什么问题?

1 个答案:

答案 0 :(得分:3)

您在每个水龙头上创建了一个新的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。

相关问题