c++ - Cocos2dx中通过plist文件加载动画

标签 c++ animation sprite cocos2d-x

最近在学习使用cocos2dx。 从现在开始,我已经能够加载和播放保存为 .plist 文件的 Sprite 动画。 我以这种方式加载动画:

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("oras.plist");
CCAnimation *bearWalkingAnimation = CCAnimation::create();

for (int i = 0 ; i < 8 ; ++i )
{

    std::stringstream ss;
    ss << "bear" << i + 1  << ".png";

    std::string name = ss.str();
    CCSpriteFrame* sprite =  CCSpriteFrameCache::sharedSpriteFrameCache()>spriteFrameByName(name.c_str());
    bearWalkingAnimation->addSpriteFrame(sprite);

}

我依赖于我知道图像名称这一事实,但现在我正在尝试组织一些我的代码。

我想知道在加载时是否知道哪个 plist 文件包含 Sprite 帧。我可以这样做吗?怎么做?

换句话说,我想编写一个通用类,它只需要知道 plist 文件名就可以加载动画。像这样的东西:

void MyLoaderClass::LoadAnimation(std::string plist_file_name){ ....}

最佳答案

我已经解决了从加载的 plist 文件构建一个 CCDictionary 的问题:

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(fileName.c_str());

mAnimation = CCAnimation::create();

CCFileUtils *fileUtils = CCFileUtils::sharedFileUtils();
const char *fullPath = fileUtils->fullPathFromRelativePath(fileName.c_str());


CCDictionary *dictionary = CCDictionary::createWithContentsOfFileThreadSafe(fullPath);
CCDictionary *framesDict = static_cast<CCDictionary*> (dictionary->objectForKey("frames"));

CCArray *keys = framesDict->allKeys();

for (int i = 0 ; i < keys->count(); ++i)
{
    CCString *spriteFileName = static_cast<CCString *> (keys->objectAtIndex(i));
    CCSpriteFrame* sprite =  CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(spriteFileName->getCString());
    mAnimation->addSpriteFrame(sprite);

}

关于c++ - Cocos2dx中通过plist文件加载动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12194930/

相关文章:

jquery Sprite 动画响应式

c++ - QuickSort 不排序数组

xna - 如何缩放屏幕上的像素?

java - 服务器应用程序的 C++ 与 Java

javascript - 分别为数据集制作动画

java - JUNG 沿边缘的动画图像

android - 在android中动画位图图像

unity3d - Sprite 意外地 reshape

c++ - 如何在父 RECT 中有效地执行图像剪辑?

c++ - 为什么在 XCode 中默认情况下循环展开?