精灵会自动移除吗?

Posted

技术标签:

【中文标题】精灵会自动移除吗?【英文标题】:Are sprites automatically removed? 【发布时间】:2020-06-04 01:38:08 【问题描述】:

我目前正在尝试在我的游戏中编写一些流星,一旦它们移出屏幕,它们似乎就会消失。但我不确定 swift 是否真的会自动为我删除,或者它们是否还在徘徊。

我在屏幕顶部启动它们并使用physicsBody 使用重力将它们向下移动。

star.physicsBody = SKPhysicsBody(rectangleOf: star.size)

我知道苹果文档说“稍后,如果精灵从场景中移除或不再可见,如果 SpriteKit 需要该内存用于其他目的,它可以删除纹理数据。”

https://developer.apple.com/documentation/spritekit/skspritenode/getting_started_with_sprite_nodes

但我觉得这种说法很模糊,只是想确认一下,因为我在屏幕上再也看不到我的星图,我也可以假设它已被删除。

(而不仅仅是在屏幕外的某个地方聚集)

【问题讨论】:

屏幕外的内容不会自动删除。 (不可能,因为 SpriteKit 无法判断某些未来的程序操作是否会将它们带回屏幕。) @bg2b Ty,SpriteKit 是否会自动删除精灵,还是我们必须自己手动完成? 【参考方案1】:

不 - 它不会自动删除。

SK 文档中的“从场景中移除”并不意味着如果您再也看不到它,这意味着在相关精灵上调用了“RemoveFrom...”方法。

如果精灵不可见,那么游戏引擎将不会绘制它,并且可以通过删除它的纹理来优化内存,但精灵仍在被跟踪并碰撞和反弹对象等。

SK 场景向各个方向无限延伸,您设备的屏幕只是场景上的一个可移动窗口。如果您在游戏中决定不再需要移动到屏幕外的精灵,那么您需要代码来检测这一点,然后针对精灵发出“RemoveFromParent”。

【讨论】:

以上是关于精灵会自动移除吗?的主要内容,如果未能解决你的问题,请参考以下文章

怎样在.net项目中移除一个重复的引用?

为啥通知会自动从 iOS 通知中心移除?

c# list移除第0个元素后面会自动往前移吗?

移除 MVC 中的浏览器自动完成功能

三击后如何删除精灵

UIViewController setView nil 自动从 superview 中移除