Cocos2D-X是选择合适的精灵表的最有效方法

Cocos2D-X most efficient way to select the appropriate sprite sheet

本文关键字:有效 方法 精灵 Cocos2D-X 选择      更新时间:2023-10-16

我的第一个场景有3组精灵表。我正在使用XCode使用Cocos2D-X为iOS进行开发。

第一个子画面表具有扩展名-sd,第二子画面片具有-hd,第三套有3张sprite表(使用Texture Packer Pro中的Multipack),扩展名为ipadhd。我遵循了一个教程,我发现了一个类似的方法

CCString* file = (Utils::getArtScaleFactor() > 1) ? CCString::create("randomFile-hd.plist") : CCString::create("randomFile-sd.plist");
//The Utils::getArtScaleFactor function
float Utils::getArtScaleFactor()
{
    return artScaleFactor;
}

1-是否有类似的方法在3个文件而不是2个文件之间进行选择?

2-这是选择适当文件大小的常用方法吗?

3-这个问题有点偏离了我讨论的主题,但我真的需要一个答案:我有一个动画,它的帧被分割成3个精灵表,我如何缓存3.plist文件?如果这是不可能的,我有什么选择?

希望我提供了所有必要的信息!

问候

  1. 当然,但为了清晰和灵活,这个三元运算符可能应该用另一个构造(比如开关)来切换。

    例如:

    // Always init your pointers.
    CCString* file = NULL;
    switch (Utils::getArtScaleFactor()) 
    {
      // Scale factor shouldn't ever be 0, but we should account for it 
      // so it doesn't get picked up by the default case.
      case 0:
      case 1:
        file = CCString::create("randomFile-sd.plist");
        break;
      case 2:
        file = CCString::create("randomFile-hd.plist");
        break;
      // Scale factors 3 and above get the largest resource.
      default:
        file = CCString::create("randomFile-super-hd.plist");
        break;
    }
    
  2. 是的,这种类型的逻辑在wiki上,除了它们对三种资源大小使用if-else。我也在论坛和教程上看到过。

  3. 根据cocos2d iphone论坛上的这条帖子,

CCSprite可以显示具有不同纹理的CCSpriteFrames。因此,即使使用混合不同纹理(精灵表)的帧的动画也没有任何问题-Stepan Generalov

那里发布的实现在obj-c中,但您可以很容易地将cocos2dapi调用转换为cpp。