swift – 获取精灵在removefromParent之后从场景中删除时发出消息?

swift – 获取精灵在removefromParent之后从场景中删除时发出消息?,第1张

概述在 Swift中有什么方法我可以告诉SKSpriteNode实际上是从场景中删除的吗?我不认为它实际上是在调用removeFromParent时完成的,而是我认为它是在以后完成的,当时Sprite-Kit认为这样做很方便. 我正在尝试理解整个生命周期,并且我注意到即使在删除了精灵后,精灵仍然可以参与didBeginContact中的接触和碰撞. 如果我打印出子项的内容(即包含场景中所有子项的数组) 在 Swift中有什么方法我可以告诉SKSpriteNode实际上是从场景中删除的吗?我不认为它实际上是在调用removeFromParent时完成的,而是我认为它是在以后完成的,当时Sprite-Kit认为这样做很方便.

我正在尝试理解整个生命周期,并且我注意到即使在删除了精灵后,精灵仍然可以参与dIDBeginContact中的接触和碰撞.

如果我打印出子项的内容(即包含场景中所有子项的数组),我看到一旦调用removeFromParent就删除了精灵,但精灵仍然可用(至少,对于SK游戏的执行)环).

编辑:这个问题来自我之前关于为一个联系人(Sprite-Kit registering multiple collisions for single contact)多次调用dIDBeginContact的问题,并发现在第一次联系期间删除精灵并没有阻止后续联系. (因为SK事先已经“联系”了联系人.)所以我想知道精灵什么时候被删除了.

解决方法 我错过了明显的吗?所以即使在removeFromParent之后,精灵仍然存在.但是,它可能是因为我已将节点分配给临时SKSpriteNode变量,然后只要该变量存在,就会有一个对该节点的强引用,因此它不会被释放.此外,SKPhysicsContact对象本身将保留对physicsBody的引用,该对bodyBody具有对我认为也将阻止分配的节点的引用.

更新

要查看实际释放精灵的时间,请使用deinit()方法:

deinit {    print("Invader of type \(type) deinitialised")}

我认为这只能添加到子类定义中,而不能通过扩展名添加.

拥有一个对要删除的节点的强引用的变量将阻止该节点被解除分配,直到该变量本身被删除或更改为引用其他内容.

总结

以上是内存溢出为你收集整理的swift – 获取精灵在removefromParent之后从场景中删除时发出消息?全部内容,希望文章能够帮你解决swift – 获取精灵在removefromParent之后从场景中删除时发出消息?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1006328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存