2

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

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

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

关联

我在模拟器中运行这个应用程序。然后我调用内存警告。然后我尝试在图像(纹理)之间切换。而且我看到 3 张图像中的 2 张被删除(除了图像同时显示内存警告)。

我尝试对 CCSprite 和 ССTexture2D 使用保留/释放命令,但它们会导致从未调用释放对象的 dealloc 方法的情况。

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

4

3 回答 3

3

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

于 2012-12-22T10:20:31.760 回答
2

默认情况下,内存警告 cocos2d 将删除未使用的纹理。内存警告的全部意义在于操作系统告诉您的应用程序“嘿,那不行,减少您的内存需求,否则我将关闭您”,您的应用程序应该像“哎呀,抱歉,现在释放内存”。

于 2012-12-19T23:10:01.340 回答
2

如果您在预加载纹理时收到内存警告,cocos2d 删除未使用纹理的默认行为会让您大吃一惊。更多关于这个问题在这里。

我的建议:去掉 AppDelegate 内存警告方法中清除 cocos2d 缓存的调用。当然,您要格外小心内存使用情况。或者,您可以在预加载图像时简单地禁用该行为,但这可能只是将问题移到稍后的时间点。

于 2012-12-19T23:13:38.210 回答