在我的游戏中,关卡的大小可能会大于手机的屏幕,相机会跟随玩家的关卡,因此场景中可能会有相当数量的内容(例如SKEmitterNodes)在任何给定时间都不可见。我一直在阅读一些SpriteKit文档,并在SMEmitterNode部分找到了这句话:
"考虑从场景中移除粒子发射器 在屏幕上可见。在它变得可见之前添加它。"
这可以在我的游戏设计类型中完成吗?我不希望节点被完全删除,因为它们最终将被放在屏幕上,但是我有一个很好的方法来添加/删除距屏幕一定距离的EmitterNodes(或其他SpriteNodes) /这是个好主意吗?我希望提高我的帧速率,并且不希望像SMEmitterNodes那样昂贵的节点在他们甚至没有显示的情况下工作,但是当玩家移动时添加/删除它们会降低性能吗?
这是我目前的想法:创建一个在屏幕周围延伸一定距离的矩形,并检测节点何时进入该矩形,如果它尚未添加到场景中,请继续添加它。感谢您的任何建议。
答案 0 :(得分:2)
SKNodes
确实不是问题,因为当它们在屏幕外时,它们无论如何都不会被渲染,只是被评估。所以用SKNodes
担心的主要问题是附加到它们的任何物理实体,
SKEmitterNode
需要一些处理能力,这就是为什么苹果建议如果它们不在屏幕上则不让它们发光。我只是将我的SKScene
类子类化,并仅在SKEmitterNode
上进行检查,看它们是否在帧中,并根据它进行发射。
所以,我会将你的所有SKEmitterNode
抛出到一个像数组一样的容器中,并有一个循环函数让节点根据你的摄像头位置和可视屏幕大小进行CGRectIntersectsRect
检查。如果它们相交,则将其添加到场景中,如果不将其从场景中移除。该阵列将保留一个强大的参考,所以你不必担心它会在你身上消失