removeFromParent() 奇怪的行为
Posted
技术标签:
【中文标题】removeFromParent() 奇怪的行为【英文标题】:removeFromParent() strange behavior 【发布时间】:2018-02-28 12:34:06 【问题描述】:我对函数 removeFromParent
有非常奇怪的行为
lazy var buttonAds: SKSpriteNode =
let n = SKSpriteNode(imageNamed: "ButtonAds")
n.position = CGPoint(x: size.width / 2, y: 600)
n.zPosition = 100
n.setScale(1.4)
return n
()
在didMove(...)
中使用addChild(buttonAds)
添加此按钮,在touchesBegan
中添加后者:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
let touch = touches.first!
if buttonAds.contains(touch.location(in: self))
// ...
doAds()
buttonAds.removeFromParent()
如果您点击广告按钮,将被删除,但如果再次点击该位置,这将再次调用函数doAds()
...奇怪,场景中不存在buttonAd。
首字母:
点击后:
谢谢
【问题讨论】:
【参考方案1】:您要做的是检查您触摸的节点是否属于应有的类型。将您的代码更改为:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
let touch = touches.first!
if nodeAtPoint(touch.locationInNode(self)) == buttonAds
doAds()
buttonAds.removeFromParent()
这应该可以解决问题!
编辑:至于为什么这样做,您正在从场景中删除节点,但它仍然是内存中的一个对象(否则您将无法在其上使用buttonAds.contains(...)
)所以它仍然有它的存储位置。
【讨论】:
是的,这可以解决问题。对于 Swift4atPoint(touch.location(in: self))
。但是为什么第一个解决方案没有按预期工作:从父级中删除以上是关于removeFromParent() 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章