码迷,mamicode.com
首页 > 其他好文 > 详细

cocos2dx ActionAnimate

时间:2020-05-10 23:24:56      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:没有   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这篇文章

cocos2dx ActionAnimate

标签:没有   dsp   一个个   单例对象   tps   存储   etc   解析   s2d   

原文地址:https://www.cnblogs.com/czwlinux/p/12865558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!