Cocos2D-X самый эффективный способ выбора подходящего спрайт-листа

У меня есть 3 комплекта листов спрайтов для моей первой сцены.
Я использую XCode для разработки под iOS с использованием Cocos2D-X.

Первый лист спрайта имеет расширение -sd,
второй лист спрайта имеет -hd,
и третий набор имеет 3 листа спрайтов (используя Multipack в Texture Packer Pro) с расширением -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

Решение

  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. Да, этот тип логики на вики, за исключением того, что они используют if-else для трех размеров ресурсов. Я видел это и на форумах и в учебниках.

  3. В соответствии с эта тема на форумах cocos2d-iphone, да:

CCSprite может отображать CCSpriteFrames с различными текстурами.
Так что нет никаких проблем, даже если использовать анимацию, которая смешивает кадры из разных текстур (спрайт-листов) — Степан Генералов

реализации размещены там находятся в obj-c, но вы можете легко конвертировать вызовы cocos2d api в cpp.

1

Другие решения


По вопросам рекламы [email protected]