Cocos2D中。正确加载和存储图像?

时间:2012-12-19 21:13:46

标签: image cocos2d-iphone ccsprite cclayer cctexturecache

这个问题有很多答案。但所有这些不正确

例如,如果我使用一个CCSprite对象创建了一个CCLayer对象。我有3个纹理,我想在每次触摸时切换它们。

例如,我会使用类似的东西:

link

我在Simulator中运行此应用程序。然后我打电话给记忆警告。然后我尝试在图像(纹理)之间切换。我看到3张图片中有2张被删除了(除了图像同时出现了内存警告)。

我尝试对CCSprite和ССTexture2D使用retain / release命令,但是当从未调用释放对象的dealloc方法时,它们会导致这种情况。

那么如何正确存储它们?我想将它们存储在内存警告中,并在当前图层被销毁时释放/删除它们。

3 个答案:

答案 0 :(得分:3)

将它们存储在一个纹理图集中,使用Texture Packer创建。然后就像调用[Sprite setDisplayFrame:frameName]来切换显示的纹理一样简单。

答案 1 :(得分:2)

默认情况下,内存警告cocos2d将删除未使用的纹理。内存警告的全部内容是操作系统告诉你的应用程序“嘿,那不行,减少你的记忆欲望或我会让你失望”,你的应用程序应该像“哎呀,抱歉,现在释放内存”。< / p>

答案 2 :(得分:2)

如果在预加载纹理时收到内存警告,cocos2d删除未使用纹理的默认行为将会射击你的脚。 More about this issue here.

我的建议:删除在AppDelegate的内存警告方法中清除cocos2d缓存的调用。当然,您需要特别注意内存使用情况。或者,您可以在预加载图像时简单地禁用该行为,但这可能只是将问题移到稍后的位置。