手动添加
手动添加的方法需要将每一帧要显示的精灵有序添加到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对象*/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。