1

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

  1. 该图像位于单独的文件“bg.png”中

    CCSprite *image1 = [CCSprite spriteWithFile:@"bg.png"];
    CCSprite *image2 = [CCSprite spriteWithFile:@"bg.png"];        
    
  2. 图像位于精灵表“bg_sheet.png”中

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

    然后

    CCSprite *image1 = [CCSprite spriteWithSpriteFrameName:@"bg.png"];
    CCSprite *image2 = [CCSprite spriteWithSpriteFrameName:@"bg.png"];
    

我的问题是:

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

1 回答 1

2
  1. 你看起来不太对劲。在这两种情况下,图像只会被放入内存一次。你可以检查spriteWithFile:代码。它试图在精灵帧缓存中找到精灵帧,并且只有在没有找到需要的帧时才加载它。

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

于 2012-08-31T11:22:12.123 回答