CCSprite内存:文件VS帧

时间:2012-08-31 11:09:47

标签: cocos2d-iphone ccsprite

假设我需要使用相同图像的多个CCSprite。我可以想到以下两个解决方案:

  1. 图片位于单独的文件“bg.png”

    CCSprite *image1 = [CCSprite spriteWithFile:@"bg.png"];
    CCSprite *image2 = [CCSprite spriteWithFile:@"bg.png"];        
    
  2. 图片位于spritesheet“bg_sheet.png”

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"bg_sheet.png"];
    

    然后

    CCSprite *image1 = [CCSprite spriteWithSpriteFrameName:@"bg.png"];
    CCSprite *image2 = [CCSprite spriteWithSpriteFrameName:@"bg.png"];
    
  3. 我的问题是:

    • 我想在案例1中,图像在内存中加载了两次,而在案例2中,它只加载了一次。我是对的吗?
    • 那么这是否意味着使用spritesheets总是更好?
    • 我是否还有其他更好的方法来实现它?

1 个答案:

答案 0 :(得分:2)

  1. 你不对。在这两种情况下,图像将仅被放入存储器一次。您可以查看spriteWithFile:代码。它试图在精灵帧缓存中找到精灵帧,并且只有在找不到所需的帧时才加载它。

  2. 使用spritesheets有助于节省内存。例如,对于尺寸为129x129的图像,将创建大小为256x256的纹理。但你可以在一个spritesheet中添加许多这样的图像,只会创建一个大的纹理(我的意思是,它将有spritesheet 1024x1024或2048x2048,只有一个纹理具有相同的大小)。