我们首先用TP将我们的资源图片压缩成一个大图片(包含plist和png文件),然后就把这张大图的这两个文件包含在我们的程序文件里,这样我们就可以做有意思的动画了。
现在介绍一些相关类:
为了方便地记录纹理的显示信息,Cocos2d-x提供了框帧类CCSpriteFrame。一个框帧包含两个属性,纹理与区域。纹理指的是将要被显示的纹理,而区域指的是此纹理将要被显示的部分。一个框帧可以完整地描述精灵显示的内容,因此在动画中,我们使用框帧来表示每一帧的内容。
用CCAnimation描述一个动画,而精灵显示动画的动作则是一个CCAnimate对象。动画动作CCAnimate是精灵显示动画的动作,它由一个动画对象创建,并由精灵执行。
代码:
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
char strPlist[64] = {0};
char strPng[64] = {0};
sprintf(strPlist,"spritesheet.plist");
sprintf(strPng,"spritesheet.png");
cache->addSpriteFramesWithFile(strPlist,strPng);
CCArray* animFrames = CCArray::array();
animFrames->initWithCapacity(8);
char str[64] = {0};
CCSprite* sprite = CCSprite::create("bear1.png");
sprite->setTag(1);
sprite->setPosition(ccp(winSize.width/2,winSize.height/2));
this->addChild(sprite);
for(int i = 1; i <= 8; i++)
{
sprintf(str, "bear%d.png",i);
CCSpriteFrame* frame = cache->spriteFrameByName( str );
animFrames->addObject(frame);
}
CCAnimation* animation = CCAnimation::animationWithSpriteFrames(animFrames,0.1f);
CCRepeatForever* walkAction=CCRepeatForever::actionWithAction( CCAnimate::actionWithAnimation(animation));
sprite ->runAction(walkAction);
animFrames->release();