手动添加的方法需要将每一帧要显示的精灵有序添加到Animation类中,并设置每帧的播放时间,让动画能够匀速播放。另外,还要通过setRestoreOriginalFrame来设置是否在动画播放结束后恢复到第一帧。创建好Animation实例后,需要创建一个Animate实例来播放序列帧动画。
CCAnimation *animation = CCAnimation::create(); for (int i = 1; i <= 4; i++) { char szname[100] = {0}; sprintf(szname,"an1_anim%d.png",i); animation->addSpriteFrameWithfilename(szname); } animation->setDelayPerUnit(2.8f/14.0f); animation->setRestoreOriginalFrame(true); CCAnimate *action = CCAnimate::create(animation); CCSprite *sprite = CCSprite::create("an1_anim1.png"); sprite->setposition(ccp(100,100)); this->addChild(sprite); sprite->runAction(action);
在创建Animation实例时会用到以下几个接口:
addSpriteFrame,添加精灵帧到Animation实例 setDelayUnits,设置每一帧持续时间,以秒为单位 setRestoreOriginalFrame,设置是否在动画播放结束后恢复到第一帧 clone,克隆一个该Animation实例 文件添加
/*加载图片帧到缓存池*/CCSpriteFrameCache *frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();//3.x版本获得缓存池方法如下//SpriteFrameCache *frameCache = SpriteFrameCache::getInstance();frameCache->addSpriteFramesWithfile("scene1atlasiPhone.pList"); hero = CCSprite::createWithSpriteFramename("sv_anim_10.png"); hero->setposition(ccp(100,100)); this->addChild(hero); int iframeNum = 15; CCSpriteFrame *frame = NulL; CCArray *frameArray = CCArray::create(); /*用一个列表保存所有CCSpriteFrame对象*/ for (int i = 10; i <= 29; i++) {frame = frameCache->spriteFrameByname(CCString::createWithFormat("sv_anim_%d.png",i)->getCString()); frameArray->addobject(frame); } /*使用CCSpriteFrame列表创建动画对象*/ CCAnimation *animation = CCAnimation::createWithSpriteFrames(frameArray); animation->setLoops(-1); animation->setDelayPerUnit(0.1f); CCAnimate *action = CCAnimate::create(animation); hero->runAction(action);/*从缓存池中获取CCSpriteFrame对象*/总结
以上是内存溢出为你收集整理的cocos2d-x 2.x创建帧序列动画全部内容,希望文章能够帮你解决cocos2d-x 2.x创建帧序列动画所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)