我正在编写一个基于二维平铺(正交平铺)的iPhone游戏。所有级别在首次播放应用程序时都是程序生成的,然后一直持续到用户想要新地图为止。地图相当大,宽度和高度分别为1000个,地形可破坏。目前它与Terraria非常相似,但这会改变。
要保存地图/平铺信息,我目前正在使用多个2维c样式数组。这很好用,但我担心它占用的内存量,因为数组都定义为short array[1000][1000]
,它占用(1000 * 1000 * sizeof(短))字节的空间。
当iPhone没有令人难以置信的大量内存可供使用时,这并不是特别理想,特别是当用户进行多任务处理时。主要问题是我无法使用特定的平铺地图格式,例如.tmx,因为所有级别都是程序生成的。性能也可能是一个问题,因为如果在索引(x,y)处销毁了一个tile,那么我需要更改该索引中的数据。我还考虑过将平铺地图数据写入文本文件,但我认为访问或更改数据时会遇到困难或性能问题。
记住这一切,处理我的瓷砖数据的有效和快速方法是什么?
答案 0 :(得分:1)
我对此的直觉是Core Data结构化,使得每个tile元素与其周围的tile有关系。这里有一些非常重要的开销,但优点是你可以从内存中释放不在屏幕上的磁贴,并在需要时将其故障排除。当您向一个方向移动时,您可以在该方向上查询切片,并且当您在后台时可以相当便宜地转储内存。这将摆脱“几个”2D阵列并将所有数据移动到单个对象中。原则上,网格的大小可以是这样的,因为一切都是通过关系而不是协调。
您可以使用SQLite类似地解决问题,查询给定范围内的行和列。您可以将对象标记为NSDiscardableContent
并将它们放在NSCache
中,这可以显着提高内存性能。只要允许坐标为正数和负数,您仍然可以生成有效无限的网格。