我正在构建一个应用程序,它使用 Cocos2d 创建内容 map (技术上是图论意义上的大树)。每个节点都由具有自己纹理的 Sprite 表示,叶节点都具有第二个“按下按钮”纹理。另外,一些节点是PNG动画。我有一张包含 130 个左右节点纹理的 Sprite 表,以及另外 3 个用于动画的 Sprite 表。这 4 个文件加起来总共只有 18.4 MB 左右。
如果我运行应用程序并且不运行 cocos2d 部分(即根本不启动框架,因此永远不加载纹理),应用程序的运行速度约为 10 MB。当我加载 Cocos2d 和那些 Sprite 表时,内存猛增超过 90 MB。
我所有的研究似乎都表明我正在以最有效的方式做事,但由于内存使用率已经如此之高,我在 iPad 1 上遇到了很多与内存相关的崩溃。
这对cocos2d来说正常吗?由于图像本身不是很大,是否因为 Sprite 的数量而使用了如此多的内存?有没有办法减少内存占用?我很茫然,而且非常在 Guzzle 下......
最佳答案
事实证明,通过将 Sprite 打包成大 Sprite 表所获得的效率是通过渲染时间来衡量的,而不是通过节省的内存来衡量的。无论是在 UIImage 还是像 Cocos2d 这样的 OpenGL 框架中,当您加载图像时,它占用的内存量都是宽度 x 高度 x 每个像素的字节数。因此,2048x2048 png 图像占用 2048x2048x4 字节内存 (12 MB)。
为了在这种情况下减少内存,我只需根据需要加载内容,并在不需要时立即卸载它们。现在的技巧是找出加载的位置和时间,这样用户就不会出现卡顿的情况。有趣!
关于ios - 当您在 Cocos2d 中加载纹理(使用 Sprite 表)时,内存使用量如何增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6905885/