标签:没有 dsp 一个个 单例对象 tps 存储 etc 解析 s2d
前言:
animate需要使用CCAnimation对象来进行初始化。该对象是继承CCObject
CCAnimation的构造过程有多种方式,可以通过plist也可以通过直接设置图片的方式。
一、CCAnimationCache:animation的解析器
通过addAnimationsWithFile(const char* plist);可以将plist文件解析出里面的所有animation对象。该plist是存储关于animation的相关对象。
然后通过CCAnimation* animationByName(const char* name);获取到指定的animation对象。
CCAnimationCache *cache = CCAnimationCache::sharedAnimationCache(); cache->addAnimationsWithFile("animations/animations-2.plist"); CCAnimation *animation2 = cache->animationByName("dance_1");
如上所示,则为获取到animation的一般过程。
二、使用CCAnimation::createWithSpriteFrames的方式
跟第一种一样使用plist导入,但是导入的plist存储的不是animation对象,而是一个个的图片对象。
CCSpriteFrameCache通过调用addSpriteFramesWithFile可以将plist文件解析出所有的图片对象。
然后通过CCSpriteFrame* spriteFrameByName(const char *pszName);获取到指定的图片对象。
最后才调用CCAnimation::createWithSpriteFrames
CCAnimate* HelloWorld::createAnimate2() { CCSpriteFrameCache* frameCache = CCSpriteFrameCache::sharedSpriteFrameCache(); frameCache->addSpriteFramesWithFile("boys.plist", "boys.png"); int iFrameNum = 15; CCSpriteFrame* frame = NULL; CCArray* frameArray = CCArray::create(); for (int i = 1; i <= iFrameNum; ++i) { frame = frameCache->spriteFrameByName(CCString::createWithFormat("run%d.png", i)->getCString()); frameArray->addObject(frame); } CCAnimation* animation = CCAnimation::createWithSpriteFrames(frameArray); animation->setLoops(-1); animation->setDelayPerUnit(0.1f); CCAnimate* action = CCAnimate::create(animation); return action; }
如上所示将所有的精灵对象组合成一个数组来构造CCAnimation对象。
可以通过先CCAnimation* create(void);一个空的对象,然后再animation->addSpriteFrame(frame);一个一个加进去也是可以的。
当操作完这些之后记得要为CCAnimation设置循环次数还有每个图片精灵之间的切换时间间隔。
因为CCSpriteFrameCache是单例对象,所以当你导入相同的plist文件两次的时候,它其实只执行一次而已。如下所示当没有找到已经导入过的对应的plist文件才进行导入操作。
void CCSpriteFrameCache::addSpriteFramesWithFile(const char *pszPlist) {if (m_pLoadedFileNames->find(pszPlist) == m_pLoadedFileNames->end()) 。。。。
具体可以看https://www.cnblogs.com/czwlinux/p/12790741.html这篇文章
标签:没有 dsp 一个个 单例对象 tps 存储 etc 解析 s2d
原文地址:https://www.cnblogs.com/czwlinux/p/12865558.html