今天再来添加一种逐帧动画的方法,或者说这不是方法,而是封装。是的,你没看错,是封装!!!
这几天自己在做一个小游戏,用来差不多一周多的时间。我想也就实习生才能有这么多工作时间让你去搞这些自己的游戏吧?
游戏的制作很多都是参考 《ios 5 cocos2d 游戏开发实战》 这本书里的一些代码风格,感觉写的不错。缺点就是这本书都是obj-c 的语言,而我只会c++,可以想象移植过程的压力是多大?!(开玩笑的)。
好了,直接把我写的逐帧动画的封装贴上来吧
先看头文件:
#ifndef __ANIMATION_H__ #define __ANIMATION_H__ #include "cocos2d.h" using namespace cocos2d; class QuickAnim : public CCLayer { public: static CCAnimation* createAnim(char *fileName,char* eachFileName,int frameCount,float delay); }; #endif
然后是.cpp
/* 该封装使用方法: 在需要使用动画的时候调用createAnim函数, createAnim(char *fileName,char* eachFileName,int frameCount,float delay) 第一个参数是fileName.plist,第二个参数是.plist里的单个图片的名字再加%d.png,第三个参数是总共是几帧的动画,第四个参数是每帧切换时间。 eg: CCSprite* player = CCSprite::create(); this->addChild(player,2); player->setPosition(ccp(size.width/2,size.height/2)); player->runAction(CCRepeatForever::create( CCAnimate::create(QuickAnim::createAnim("sprite/player.plist","player%d.png",8,0.1f)) ) ); */ #include "Animation.h" CCAnimation* QuickAnim::createAnim(char *fileName,char* eachFileName,int frameCount,float delay) { CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache(); cache->addSpriteFramesWithFile(fileName); CCArray* animFrames = CCArray::createWithCapacity(frameCount); char str[100] = {0}; for(int i = 0; i < frameCount; i++) { sprintf(str, eachFileName,(i+1)); CCSpriteFrame *frame = cache->spriteFrameByName(str); animFrames->addObject(frame); } CCAnimation* animation = CCAnimation::createWithSpriteFrames(animFrames,delay); return animation; }
好了,就这样啦。哈哈。
想起当初刚来实习的时候,不懂什么叫封装,继承之类的,现在不只懂了,还能自己写一个,虽然很简单。但是很满足。
话说快过年了。boss打算让我继续学下cocosBuild,下次更新可能就是关于这方面的学习啦。