Cocos2d-X使用CCAnimation创建动画
2017-04-22 19:58
477 查看
动画在游戏中是很常见的
程序1:创建一个简单的动画
首先须要在project文件夹下的Resource文件夹中放一张有各种不同动作的图片
在程序中加入以下的代码
运行结果:
程序2:有plist文件的动画载入
首先须要在project文件夹下的Resource文件夹中放一张有各种不同动作的图片和一个plist文件
plist格式的文件实际上是一个XML文件,文件里的内容
程序代码:
运行结果:
程序3:通过鼠标实现动画切换
首先创建一个Animation类
在AnimationPreload.h中加入以下代码
在AnimationPreload.cpp中加入以下的代码
运行结果:
程序1:创建一个简单的动画
首先须要在project文件夹下的Resource文件夹中放一张有各种不同动作的图片
在程序中加入以下的代码
#include "Animation.h" CCScene* Animation::scene() { CCScene* s = CCScene::create(); Animation* layer = Animation::create(); s->addChild(layer); return s; } bool Animation::init() { CCLayer::init(); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建精灵 CCSprite* sp = CCSprite::create(); sp->setPosition(ccp(winSize.width / 2, winSize.height / 2)); addChild(sp); //精灵放大4倍 sp->setScale(4); //创建纹理 CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage("walkLeft.png"); //创建一个数组 CCArray* arr = CCArray::create(); //从纹理中扣了10帧frame,组成数组 for(int i = 0; i < 10; i++) { //使用纹理创建精灵帧 //第一个參数:纹理 //第二个參数:矩形 CCSpriteFrame* frame = CCSpriteFrame::createWithTexture(texture, //第一个參数:矩形的x坐标 //第二个參数:矩形的y坐标 //第三个參数:矩形的宽度 //第四个參数:矩形的高度 CCRect(i*18, 0, 18, 32)); arr->addObject(frame); } //使用精灵帧创建动画 //第一个參数:数组 //第二个參数:动画的帧数(播放两张图片的间隔时间) CCAnimation* animation = CCAnimation::createWithSpriteFrames(arr, 0.1f); CCAnimate* animate = CCAnimate::create(animation); //播放动画 //CCRepeatForever::create动画播放无限次 sp->runAction(CCRepeatForever::create(animate)); return true; }
运行结果:
程序2:有plist文件的动画载入
首先须要在project文件夹下的Resource文件夹中放一张有各种不同动作的图片和一个plist文件
plist格式的文件实际上是一个XML文件,文件里的内容
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>frames</key> <dict> <key>Boom_1.png</key> <dict> <key>frame</key> <string>{{204,305},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_10.png</key> <dict> <key>frame</key> <string>{{103,307},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_11.png</key> <dict> <key>frame</key> <string>{{103,206},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_12.png</key> <dict> <key>frame</key> <string>{{105,2},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_13.png</key> <dict> <key>frame</key> <string>{{103,105},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_14.png</key> <dict> <key>frame</key> <string>{{2,2},{101,101}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{101,101}}</string> <key>sourceSize</key> <string>{101,101}</string> </dict> <key>Boom_15.png</key> <dict> <key>frame</key> <string>{{2,408},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_16.png</key> <dict> <key>frame</key> <string>{{2,307},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_17.png</key> <dict> <key>frame</key> <string>{{2,206},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_18.png</key> <dict> <key>frame</key> <string>{{2,105},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_2.png</key> <dict> <key>frame</key> <string>{{204,204},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_3.png</key> <dict> <key>frame</key> <string>{{406,103},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_4.png</key> <dict> <key>frame</key> <string>{{305,103},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_5.png</key> <dict> <key>frame</key> <string>{{204,103},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_6.png</key> <dict> <key>frame</key> <string>{{408,2},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_7.png</key> <dict> <key>frame</key> <string>{{307,2},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_8.png</key> <dict> <key>frame</key> <string>{{206,2},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> <key>Boom_9.png</key> <dict> <key>frame</key> <string>{{103,408},{99,99}}</string> <key>offset</key> <string>{0,0}</string> <key>rotated</key> <false/> <key>sourceColorRect</key> <string>{{0,0},{99,99}}</string> <key>sourceSize</key> <string>{99,99}</string> </dict> </dict> <key>metadata</key> <dict> <key>format</key> <integer>2</integer> <key>realTextureFileName</key> <string>PFBoom.png</string> <key>size</key> <string>{512,512}</string> <key>textureFileName</key> <string>PFBoom.png</string> </dict> </dict> </plist>
程序代码:
#include "Animation.h" CCScene* Animation::scene() { CCScene* s = CCScene::create(); Animation* layer = Animation::create(); s->addChild(layer); return s; } //有plist文件的动画载入 bool Animation::init() { CCLayer::init(); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建精灵 CCSprite* sp = CCSprite::create(); sp->setPosition(ccp(winSize.width / 2, winSize.height / 2)); addChild(sp); //精灵放大4倍 sp->setScale(4); //创建精灵帧缓存 CCSpriteFrameCache* frameCache = CCSpriteFrameCache::sharedSpriteFrameCache(); //创建数组 CCArray* arr = CCArray::create(); //加入Plist文件 frameCache->addSpriteFramesWithFile("PFBoom.plist"); for (int i = 1; i <= 18; i++) { char key[128]; //通过名字获取精灵帧所在的图片 sprintf(key, "Boom_%d.png", i); //将图片加入到精灵帧中 CCSpriteFrame* frame = frameCache->spriteFrameByName(key); //将精灵帧加入到数组中 arr->addObject(frame); } //使用数组创建动画 CCAnimation* animation = CCAnimation::createWithSpriteFrames(arr, 0.1f); CCAnimate* animate = CCAnimate::create(animation); //动画消失 CCCallFunc* callfunc = CCCallFunc::create(sp, callfunc_selector(CCSprite::removeFromParent)); CCSequence* seq = CCSequence::create(animate, callfunc, NULL); //播放动画 sp->runAction(seq); return true; }
运行结果:
程序3:通过鼠标实现动画切换
首先创建一个Animation类
在AnimationPreload.h中加入以下代码
#ifndef __AnimationPreload_H__ #define __AnimationPreload_H__ #include "cocos2d.h" USING_NS_CC; class AnimationPreload : public CCLayer { public: static CCScene* scene(); bool init(); CREATE_FUNC(AnimationPreload); bool ccTouchBegan(CCTouch*, CCEvent*); CCSprite* sp; }; #endif
在AnimationPreload.cpp中加入以下的代码
#include "AnimationPreload.h" CCScene* AnimationPreload::scene() { CCScene* s = CCScene::create(); AnimationPreload* layer = AnimationPreload::create(); s->addChild(layer); return s; } bool AnimationPreload::init() { //chushihu CCLayer::init(); //获取窗体的大小 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //(创建纹理)从纹理里扣了10帧frame。组成数组 CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage("walkLeft.png"); //创建数组 CCArray* arr = CCArray::create(); //retain for (int i = 9; i >= 0; i--) { //创建精灵帧 CCSpriteFrame* frame = CCSpriteFrame::createWithTexture(texture, CCRect(i*18, 0, 18, 32)); //将精灵帧加入到数组中 arr->addObject(frame); } // 通过数组创建动画 CCAnimation* animation = CCAnimation::createWithSpriteFrames(arr, 0.05f); // 加入到缓存 CCAnimationCache::sharedAnimationCache()->addAnimation(animation, "MarioRun"); /***************************************************************/ /** 有plist文件的动画载入 **/ //创建精灵帧缓存 CCSpriteFrameCache* frameCache = CCSpriteFrameCache::sharedSpriteFrameCache(); //创建数组 arr = CCArray::create(); //将plist文件加入到精灵帧缓存中 frameCache->addSpriteFramesWithFile("PFBoom.plist"); for (int i = 1; i <= 18; i++) { char key[128]; //通过名字获取精灵帧所在的图片 sprintf(key, "Boom_%d.png", i); //将图片加入到精灵帧中 CCSpriteFrame* frame = frameCache->spriteFrameByName(key); //将精灵帧加入到数组中 arr->addObject(frame); } //创建动画 animation = CCAnimation::createWithSpriteFrames(arr, 0.1f); // 加入到缓存 CCAnimationCache::sharedAnimationCache()->addAnimation(animation, "PlaneBOOM"); sp = CCSprite::create(); sp->setPosition(ccp(winSize.width / 2, winSize.height / 2)); addChild(sp); //精灵方法4倍 sp->setScale(4); // setTouch setTouchEnabled(true); setTouchMode(kCCTouchesOneByOne); return true; } bool AnimationPreload::ccTouchBegan(CCTouch*, CCEvent*) { sp->stopAllActions(); static int i = 1; if (i == 1) { sp->runAction(CCAnimate::create( CCAnimationCache::sharedAnimationCache()->animationByName("PlaneBOOM") )); } else { sp->runAction(CCAnimate::create( CCAnimationCache::sharedAnimationCache()->animationByName("MarioRun") )); } i = 1 - i; return 0; }
运行结果:
相关文章推荐
- Cocos2d-X使用CCAnimation创建动画
- Cocos2d-X使用CCAnimation创建动画
- <cocos2d-x for wp7>在cocos2d-x使用spritesheet和用spritesheet创建动画
- 【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧(指定开始帧)以及扩展Cocos2d源码的CCAnimation简化动画创建!
- CCAnimation创建动画 cocos2d-x
- 使用CocosBuilder2.1结合cocos2d-x2.0.3创建动画场景
- 使用 CocoStudio 创建 Cocos2d-x 序列帧和骨骼动画
- cocos2d-x使用TexturePacker打包图片及使用生成的plist文件创建精灵动画
- Cocos2d学习之路三(使用Zwoptex创建精灵表单和CCAnimate动画)
- cocos2d-x 使用plist创建精灵并执行动画
- CCAnimation创建动画(cocos2d-x)
- Cocos2d-x 3.0开发(六)使用cocoStudio创建一个骨骼动画
- 如何使用CocosBuilder2.1结合cocos2d-x2.0.3创建动画场景
- 如何使用CocosBuilder2.1结合cocos2d-x2.0.3创建动画场景 分享0
- 【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧(指定开始帧)以及扩展Cocos2d源码的CCAnimation简化动画创建!
- CCAnimation创建动画-沈大海cocos2d-x教程22
- cocos2d-x-2.0.4中使用CocosBuilder创建动画注意的问题
- Cocos2d-x 创建(create)动画对象CCAnimation报错分析
- 使用 CocoStudio 创建 Cocos2d-x 序列帧和骨骼动画
- cocos2d-x使用TexturePacker打包图片及使用生成的plist文件创建精灵动画