这一篇我们准备在第3篇中创建的场景中增加一个带有动画效果的精灵.
创建精灵我们本着以下思路来写代码,首先要创建一个纹理对象CCTexture,这个纹理对象中包含了精灵动画的每一帧图片.
创建一个CCSpriteFrame(精灵帧)的数组将从纹理上切割下来的每帧图象保存到数组中.
使用CCSpriteFrame数组创建一个CCAnimation对象.利用CCAnimation对象创建一个CCAnimate对象.
这里我对CCAnimation和CCAnimate的理解是CCAnimation表示一个动画是一个名词,它单纯的就是指这段动画.而CCAnimate是一个动作,精灵会去执行这个动作.
最后精灵可以使用runAction函数执行动画,下面我们来看看代码
//创建一个带动画的精灵 void Scene1::createAnimateSprite() { CCSize size = CCDirector::sharedDirector()->getWinSize(); //1.创建一个纹理对象 CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage("Kaito.png"); //2.创建一个数组对象用来保存精灵的每一帧 CCArray *animateFrames = new CCArray(4); //3.从纹理上切割每一帧所需要的图片 for(int i=0;i<4;i++) { CCSpriteFrame *frame = CCSpriteFrame::frameWithTexture(texture,CCRectMake(32*i,48*0,32,48)); animateFrames->addObject(frame); } //4.创建CCAnimation对象 CCAnimation *ani = CCAnimation::animationWithSpriteFrames(animateFrames,0.2f); //5.创建Sprite对象 CCSpriteFrame *frame1 = (CCSpriteFrame*)animateFrames->objectAtIndex(0); CCSprite *sprite = CCSprite::spriteWithSpriteFrame(frame1); sprite->setPosition(ccp(size.width/2,size.height-50)); this->addChild(sprite,2); //6.设置精灵运行动画 CCAnimate *animate = CCAnimate::actionWithAnimation(ani); sprite->runAction(CCRepeatForever::actionWithAction(animate)); }
实际应用时,大家可以根据人物不同的动作创建不同的CCAnimate对象.当人物执行向左,向右,跳跃等动作时,播放不同的动画.
在这段代码中,我们使用了CCArray作为容器,很多看过其他cocos2dx教程的朋友可能会问,为什么不用CCMutableArray类呢?因为cocos2d-x升级到2.0后,已全面用CCArray代替了CCMutableArray类,大家在写代码时一定要注意这一点.
看看我们实现的效果吧