removeFromParent 不适用于 SKSpriteNode
removeFromParent doesn't work with 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
肯定被调用了。
有谁知道这里有什么问题吗?
您在每次点击时创建了一个新的 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。
我想在我点击场景中的按钮时删除精灵。该按钮仅在玩家与物品发生碰撞时启用。这是添加和删除精灵的代码:
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
肯定被调用了。
有谁知道这里有什么问题吗?
您在每次点击时创建了一个新的 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。