【问题标题】:Animation using .png files cocos2dx使用 .png 文件 cocos2dx 的动画
【发布时间】:2013-07-18 03:34:19
【问题描述】:

我有 9 个不同场景的 34 个 .png 图像文件。每次用户选择这 9 个场景中的 1 个时,我都会使用以下方法生成动画

 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);  

我面临的问题是,当这个动画运行时,有一个时间延迟(一切都停止了几秒钟),然后动画开始了。有什么解决办法吗?

【问题讨论】:

    标签: c++ objective-c cocos2d-x cocos2d-android


    【解决方案1】:

    每次调用 animation->addSpriteFrameWithFileName() 时都会创建一个新的“CCSpriteFrame”。

    相反,您应该首先将精灵帧添加到 CCSpriteFrameCache 并使用

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

    Ps:这些函数名称可能有点不同,但我希望你能明白。

    【讨论】:

    • CCSpriteFrameCache::sharedSpriteFrameCache() 现在已弃用。请改用CCSpriteFrameCache::getInstance()
    猜你喜欢
    • 2014-06-03
    • 2012-08-25
    • 2012-08-17
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多