精灵会自动移除吗?
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
”。
【讨论】:
以上是关于精灵会自动移除吗?的主要内容,如果未能解决你的问题,请参考以下文章