【问题标题】:recommended limit for memory management in Cocos2d?Cocos2d 内存管理的推荐限制?
【发布时间】:2012-04-30 23:59:57
【问题描述】:

Cocos2d 中的图片是否有推荐的限制,是否太大,占用太多内存?是否有一些规则,在尺寸或 Kb 方面,以避免减慢游戏速度? (对于背景图像,或我的角色图形(即使我使用批处理节点)?)

感谢您的回答

【问题讨论】:

    标签: objective-c memory-management cocos2d-iphone


    【解决方案1】:

    首先,内存使用与性能的关系非常非常非常小。您可以用纹理填充整个内存,游戏不会在意。当您渲染它们时,它们会有所不同。然后只关心你用纹理填充了多少屏幕区域,覆盖、批处理、旋转、缩放、着色和 alpha 混合的程度。这些是纹理渲染性能的主要因素。内存使用起着非常微不足道的作用。

    你可能对我做过的cocos2d sprite-batch performance test 和一般的cocos2d performance analysis 感兴趣。两者都带有测试项目。

    关于最大纹理尺寸,请查看我的Learn Cocos2D 书中的表格:

    请注意,iPhone 和 iPhone 3G 设备的纹理内存限制为 24 MB。第 3 代 (iPhone 3GS) 和更新的设备不再有这个限制。另请记住,虽然设备可能安装了 256 MB 内存,但可供应用程序使用的内存将大大减少。

    例如,在 iPad(第 1 代)上,建议不要使用超过 100 MB 的内存,最大可用内存峰值在 125 MB 左右,内存警告开始显示早在 80-90 MB 左右内存使用情况。

    在 iOS 5.1 中,Apple 还增加了 iPad 2 的最大纹理尺寸。最安全和最常用的纹理尺寸是 Retina 纹理的 2048x2048,标准分辨率纹理的 1024x1024。

    表中没有 iPod touch 设备,因为它们实际上与同代 iPhone 型号相同,但不易识别。例如,第 3 代 iPod touch 包括具有 8、16 和 32GB 闪存的设备,但 8GB 型号实际上是第 2 代硬件。

    【讨论】:

    • 感谢您的回答,您的博客看起来很棒,我会检查文章!非常感谢!
    • 嗨,我可以问你一个问题吗?我听说每个设备的正常/选定/禁用图像...当您为每个设备创建所有图像时,您会做什么?您是否为图像的每个正常/选定/禁用版本创建-hd 图像和标准图像?再次感谢
    • @Paul 你解决了吗?我曾问过一个类似的问题 (stackoverflow.com/questions/10232539/how-to-approach-hd-files) 以及另一个问题,LearnCocos2D 建议我调整 CCFileUtils 加载器以停止强制它需要高清和非高清文件..希望它有所帮助。
    【解决方案2】:

    图像和纹理的尺寸取决于您支持的设备。较旧的设备支持小层,我认为大小为 2048x2048。我认为当前设备上不存在这种限制。

    对于大图像,您肯定希望使用批处理节点,因为它们已经过测试,以展示在处理大图像时最大的性能提升。虽然一般情况下尽可能多地使用它们是个好主意。

    至于你可以加载多少,这真的取决于设备。新 iPad 具有 1 GB 内存,旨在为大图像提供更多可用内存。第一代 iPad 有 1/4 的内存量,根据我的经验,当它使用大约 100 MB 内存时,我开始看到应用程序崩溃(使用 Instruments 确认)。

    诀窍是只使用当前应用操作所需的内存,然后在您移动到新场景或新的图像/精灵/纹理集时释放它。例如,您可以拥有非常大的平铺纹理,其中只有最靠近视口的平铺被加载到内存中。如果您从内存中删除那些在屏幕上不可见的视图部分,从技术上讲,您可以拥有无​​限大小的视图。

    当然,在处理大量资源时,请确保您的应用代理对其内存警告做出适当响应。

    【讨论】:

      【解决方案3】:

      据我所知.. 大小为 1024x1024 的批处理节点占用大约 4 MB 的空间,这只是纹理内存.. 应用程序的最大限制为 24 MB。因此,当您达到这 24 MB 空间时,游戏会变慢并在此之后崩溃。为了避免速度变慢,我一次最多使用 4 个批处理节点,即 16 MB。剩下 8 MB 用于变量和其他数据。在使用更多批处理节点之前,我曾经清理内存并删除未使用的批处理节点。我不知道 4 秒内的内存限制,但对于 iPhone 4,这是我学到的。 考虑到这个逻辑,我曾经流畅地运行我的游戏。

      【讨论】:

      • 为什么说应用程序的内存限制为 24 MB?限制由设备决定,现代设备拥有更多内存。使用 Instruments,我可以看到我现在正在构建的应用程序在运行时使用了大约 80 MB 的内存。
      • 这就是为什么我提到 iPhone 4 的 24 MB。我不知道 4S.. 更多的是我学到的纹理内存。仪器内存甚至达到了150 MB。我认为仪器内存与实际使用的内存不同。休息一下,我真的不知道仪器上的内存分配。
      • 我很确定这不是正确的信息。 iPhone 4 有 24 MB 的限制?我不这么认为。您可以毫无问题地在 iPhone 4 上运行具有 4 倍内存使用量的应用程序。而且 Instruments 确实会正确报告内存使用情况,否则它不会是一个有用的工具。
      • 对于 cocos2d 纹理内存Bytes = width * height * bitsPerPixel/8;因此,对于 32 位 1024x1024 文件将需要大约 4 MB 纹理内存...检查此链接和第二个答案..stackoverflow.com/questions/457568/…
      • 24 MB 纹理内存限制仅存在于第一代和第二代设备上。 iPhone 3GS 和更新版本没有这样的限制,它们只受可用内存的限制。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2012-08-09
      • 1970-01-01
      • 2012-06-16
      • 2011-09-20
      相关资源
      最近更新 更多