大一下 学习cocos2d-x 做了点小东西,后来因为一些原因没有继续。
趁着假期,再重学一下,顺便做一些小东西吧。
---Hero.Kingsley
1、使用CCanimation和CCAnimate
作为游戏,肯定会有动画效果。至于动画效果如何产生呢?cocos2d-x引入了帧动画的概念,通过不同图片的切换达到动画的效果。
帧动画就是靠CCAnimation和CCAniamate实现的。
我们首先创建 一个sprite精灵。
sprite = CCSprite::create("1- 128×72/hero1.png");
sprite->setPosition(ccp(100,100));
this->addChild(sprite,2);
然后就是通过把动画图片文件加载进缓存内。
这里有几种方法。我采用了CCSpriteFrameCache。
另外这里要注意的是为了节省资源,可以利用texturepacker将多张png图片打包成大图png以及plist文件。plist文件相当于是一个配置文件,其底层似乎是由xml文件实现的。
plist文件和大图png文件要保持同名,不然系统无法识别。
然后:
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();//获取CCSpriteFrameCache的缓存,是一个静态的变量就像CCDirector一样
cache->addSpriteFramesWithFile("hero.plist");//把plist文件添加进去。
注意到plist文件实际上是一个配置文件,所以你可以通过小图的名字索引出他们在大图的具体位置(当然,这个步骤是由cocos2d-x为你实现的。)
for(int i = 1; i <= 16; ++i){
sprintf(name,"hero%d.png",i);
animation->addSpriteFrame(cache->spriteFrameByName(name));//把文件名传进plist文件内获取小图的spriteFrame,建议使用连续的文件名。
CC_BREAK_IF(!cache->spriteFrameByName(name));
CCLog("%s",name);
}
CCAnimation* animation = CCAnimation::create();//创建一个CCAnimation
animation->retain();
animation->setDelayPerUnit(1.0f / 16.0f); //设置每帧的时间
CCAnimationCache* sharecache = CCAnimationCache::sharedAnimationCache();
sharecache->addAnimation(animation,"fish_swimming");
CCAnimate* animate = CCAnimate::actionWithAnimation(animation);
animation->retain();
animate->setDuration(1);//设置整个动画一秒(感觉和前面重复了)。。。
sprite->runAction(animate);
这样sprite就可以游动了。如果想达到一直游动的想过可以把最后一句改成sprite->runAction(CCRepeatForever::actionWithAction(animate));
这样就可以了。
行文简陋,错误可能百出。希望cocos2d-x高手们狠狠指出错误的地方,也希望新手们能在入门时少走些弯路。