ios - removeFromParent 不适用于 SKSpriteNode

标签 ios swift sprite-kit skspritenode

我想在我点击场景中的按钮时删除 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/

相关文章:

ios - CGPath 的错误比例 - Swift

iphone - iOS 自定义表情

ios - 如何将核心数据实体导出到 CSV 文件

ios - UITabbar项目objective-c中的颜色图标

ios - 使用 iOS 版 FBSDK 登录卡住

c - Swift:访问作为对象的 C 结构成员

ios - 在 iOS 上创建 Stripe 收件人时出错

ios - 使用可变变量重复 for 循环的一次迭代

ios - 如何在IOS的UIPasteboard中设置音频数据

ios - 如何在 iOS 应用程序中编辑 'projectile' 的速度