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

posted @   LCAC  阅读(161)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示