Cocos2d中内存管理的推荐限制是什么?

4
在Cocos2d中,对于图片有没有一个推荐的限制,比如太大会占用过多内存?有没有一些规则,比如尺寸或者文件大小,来避免减慢游戏的速度?(不管是背景图片还是角色图形(即使我使用批处理节点))
谢谢你的回答。
3个回答

10
首先,内存使用量与性能几乎没有什么关系。你可以用纹理填满整个内存,游戏也不会受影响。只有在渲染纹理时才会有差别。这时主要要考虑的是纹理所占屏幕面积、它们的叠加程度、批次处理、旋转、缩放、着色和透明混合等因素。这些是影响纹理渲染性能的主要因素。内存使用量起到非常微不足道的作用。
你可能会对我做的 cocos2d 精灵批处理性能测试 和一般的 cocos2d 性能分析 感兴趣。两者都带有测试项目。
至于最大纹理尺寸,请参考我的 Learn Cocos2D 书中的表格: enter image description here 注意,iPhone和iPhone 3G设备的纹理内存上限为24 MB。第三代(iPhone 3GS)及更高版本的设备不再有此限制。还要记住,虽然一个设备可能安装了256 MB的内存,但可用于应用的内存要少得多。
例如,对于第一代iPad,建议不要使用超过100 MB的内存,并且最大可用内存峰值约为125 MB,当内存使用量达到约80-90 MB时就会开始出现内存警告。
在iOS 5.1中,苹果还增加了iPad 2的最大纹理尺寸。最安全、最常用的纹理尺寸是2048x2048用于视网膜纹理,1024x1024用于标准分辨率纹理。

以下表格中不包含iPod touch设备,因为它们与同一代iPhone模型基本相同,但不容易识别。例如,iPod touch第三代包括8、16和32GB闪存的设备,但8GB型号实际上是第二代硬件。


谢谢你的回答,你的博客看起来非常棒,我会去查看文章的!非常感谢! - Paul
1
你好,我可以问你一个问题吗?我听说过针对每个设备的普通/选定/禁用图像...当你为每个设备创建所有图像时,你会怎么做?你会为每个普通/选定/禁用版本的图像创建一个-hd图像和一个标准图像吗?再次感谢。 - Paul
@Paul,你解决了吗?我之前也问过类似的问题(http://stackoverflow.com/questions/10232539/how-to-approach-hd-files),还有另一个问题,LearnCocos2D建议我调整CCFileUtils加载器,停止强制要求hd和非hd文件同时存在。希望能对你有所帮助。 - mm24

1
图像和纹理的尺寸大小取决于您所支持的设备。旧设备支持小型层,我认为大小为2048x2048。我不认为当前设备存在这样的限制。
对于大型图像,您肯定希望使用批处理节点,因为它们已经经过测试,可以在处理大型图像时展示最大的性能提升。虽然通常情况下尽可能多地使用它们是一个好主意。
至于您可以加载多少内容,这实际上取决于设备。新款iPad有1GB内存,并且设计有更多可用于大型图像的内存。第一代iPad的内存量只有这个数量的四分之一,在我的经验中,当内存使用量达到约100MB时(使用Instruments确认),我开始看到应用程序崩溃。
诀窍是仅使用您需要的内存来进行当前应用程序的操作,然后在移动到新场景或新的图像/精灵/纹理集时释放它。例如,您可以拥有非常大的平铺纹理,其中仅将靠近视口的平铺加载到内存中。您可以在内存中删除屏幕上不可见的视图部分,从而在技术上拥有无限大小的视图。
当然,在处理大量资源时,请确保您的应用程序委托适当地响应其内存警告。

0
据我所知,大小为1024x1024的批处理节点占用约4 MB的空间,这仅是纹理内存。应用程序的最大限制为24 MB。因此,当您达到这24 MB空间时,游戏会变慢并在此之后崩溃。为避免减速,我一次最多使用4个批处理节点,即16 MB。其余8 MB留给变量和其他数据。在使用更多批处理节点之前,我会清理内存并删除未使用的批处理节点。我不知道4s的内存限制,但在iPhone 4的情况下,这就是我学到的。以此为基础,我成功地运行了我的游戏。

为什么你说一个应用程序的内存限制是24 MB?这个限制是由设备决定的,现代设备有更多的内存。使用Instruments,我可以看到我正在构建的应用程序在运行时使用了大约80 MB的内存。 - johnbakers
这就是为什么我提到iPhone 4的24 MB。我不知道4S的情况...而且我学习的是纹理内存。仪器中的内存甚至达到了150 MB。我想仪器中的内存与实际使用的内存是不同的。其他方面,我对仪器上的内存分配并不真正了解。 - Nikhil Aneja
我非常确定这不是正确的信息。iPhone 4上有24 MB的限制?我不这么认为。您可以在iPhone 4上运行具有4倍此内存使用量的应用程序而没有问题。而且Instruments确实会正确地报告内存使用情况,否则它就不会是一个有用的工具。 - johnbakers
对于cocos2d纹理,内存字节数=宽度高度每像素位数/8;因此,对于一个32位的1024x1024文件,将占用大约4MB的纹理内存...请查看此链接和第二个答案... https://dev59.com/akbRa4cB1Zd3GeqPy0cP - Nikhil Aneja
2
24 MB 的纹理内存限制仅存在于第一代和第二代设备上。iPhone 3GS 及更高版本没有此限制,它们只受可用内存的限制。 - CodeSmile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接