2013-07-18 5 views
0

У меня есть 34 файла .png для 9 разных сценариев. Каждый раз, когда пользователь выбирает 1 из этих 9 сценариев и в соответствии с этим я генерировать анимацию с помощью следующихАнимация с использованием .png файлов cocos2dx

std::string name; 
MixingScreen::animation = CCAnimation::create(); 
// load image file from local file system to CCSpriteFrame, then add into CCAnimation 
for (int i = 0; i < 34; i++) 
{ 
    std::stringstream st,ii; 
    st << Constants::flav; 
    if (i<10) 
    { 
     ii<<i; 
     name="screen/screen02/fx/sugar/0" + st.str()+"/a_0000"+ii.str()+".png"; 
    } 
    else 
    { 
     ii<<i; 
     name="screen/screen02/fx/sugar/0" + st.str()+"/a_000"+ii.str()+".png"; 
    } 
     //sprintf(szImageFileName, "Images/grossini_dance_%02d.png", i); 
    MixingScreen::animation->addSpriteFrameWithFileName(name.c_str()); 
    } 
    MixingScreen::animation->setDelayPerUnit(5.0f/34.0f); 

    action = CCAnimate::create(MixingScreen::animation); 
    CCCallFunc *done = CCCallFunc::create(this, callfunc_selector(MixingScreen::doneMixing)); 
    CCSequence *readySequence = CCSequence::create(action,done,NULL); 
    particles->runAction(readySequence); 

Проблема я столкнулся, что, когда эта анимация работает, существует временной лаг (все останавливается в течение нескольких секунд), а затем начинается анимация. Любое решение?

ответ

2

Каждый раз, когда вы вызываете анимацию-> addSpriteFrameWithFileName(), создается новый «CCSpriteFrame».

Вместо этого вы должны сначала добавить спрайт кадры CCSpriteFrameCache и использовать

animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameWithName("")) 

Ps: эти имена функций могут быть немного по-другому, но я надеюсь, что вы получите эту идею.

+1

'CCSpriteFrameCache :: sharedSpriteFrameCache()' теперь устарел. Вместо этого используйте 'CCSpriteFrameCache :: getInstance()'. – namezero