ios - 当您在 Cocos2d 中加载纹理(使用 Sprite 表)时,内存使用量如何增加?

标签 ios ipad memory cocos2d-iphone sprite-sheet

我正在构建一个应用程序,它使用 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/

相关文章:

Ios 在 NSMutableArray 中添加对象

ios - Swift 中的 CocoaLumberjack,如何打印行号和文件名

c++ - 对齐的内存分配器: memory corruption (game engine architecture[Jason Gregory])

c++ - 保持独立结构的内存堆分配器库?

flash - Adobe AIR 可以使用的最大内存量是多少?

ios - Swift UIView.animateWithDuration 和 For 循环

ios - 跟踪数十个应用程序 ID 和配置文件的最佳方法是什么?

ios - dispatch_async(dispatch_get_main_queue() 不适用于 iPad,但适用于 iPhone

ios - UISplitViewController - 状态栏颜色,iOS 7

c# - 从 C# 访问 iPad 图片