cocos2dx ActionAnimate

Posted czwlinux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cocos2dx ActionAnimate相关的知识,希望对你有一定的参考价值。

前言:

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这篇文章

以上是关于cocos2dx ActionAnimate的主要内容,如果未能解决你的问题,请参考以下文章

cocos2dx android 代码混淆

cocos2dx android 代码混淆

android和cocos2dx可以互调吗

关于cocos2dx手游lua文件加密的解决方式

TiledMap+TexturePacker,解决cocos2dx下tiled地图1坑

C++小问题cocos2dx小问题