SKSpriteNodes的内存使用情况

时间:2016-03-29 00:26:25

标签: ios sprite-kit

我在iOS上制作基于磁贴的冒险游戏。目前,我的关卡数据存储在100x100阵列中。我正在考虑两种显示我的关卡数据的方法。最简单的方法是为每个图块创建SKSpriteNode。但是,我想知道iOS设备是否有足够的内存用于10,000个节点。如果不是,我总是可以根据需要从关卡数据中创建和删除节点。

1 个答案:

答案 0 :(得分:1)

我知道这是为了与Tiled合作,但其中的代码可能会帮助您优化您的目标。我已经尽力优化大型地图,就像你正在制作的那样。要看的重点是如何创建纹理我知道这是过去的一个重要杀手。

夫特 https://github.com/SpriteKitAlliance/SKATiledMap

对象-C https://github.com/SpriteKitAlliance/SKAToolKit

两者都设计为加载JSON字符串,因此只要您匹配预期的格式,您就有可能仍然可以生成随机地图而无需使用Tiled Editor。

此外,您可能需要考虑在Objective-C版本中查看剔除的工作方式,因为我们发现最近从父级删除的节点在iOS 9上实际上已经优化了性能。

希望您能找到一些有用的信息,如果您有任何问题,请随时给我发电子邮件。

修改

另一种选择是查看对象池。核心概念是只创建您需要显示的精灵,并在完成后将它们存储在各种各样的集合中。当你需要一个新的精灵时,你会要求该集合为一个,如果它没有一个你创建一个新精灵。

例如,你需要一个草砖,你需要一个草砖,它没有一个已经创建的等待使用它,所以它创建了一个。您可以这样做以填充9 x 7网格以填满您的屏幕。当你离开时,移出屏幕的草被扔进集合中,当新行进入并需要草时,再次使用它。如果你正在做的只是显示瓷砖,这非常有效。如果瓷砖具有需要更新且具有独特性的动态属性,那就不那么好了。

这是一个很好的链接,即使它是Unity =)

https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/object-pooling