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