`

Cocos2d-x开发实例介绍帧动画使用

 
阅读更多

下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画。

 

下面我们再看看具体的程序代码,首先看一下看HelloWorldScene.h文件,它的代码如下:

 

[html] view plaincopy
 
  1. #ifndef __HELLOWORLD_SCENE_H__  
  2. #define __HELLOWORLD_SCENE_H__  
  3.    
  4. #include "cocos2d.h"  
  5.    
  6. class HelloWorld : public cocos2d::Layer  
  7. {  
  8.          bool isPlaying; //播放标识                                                                                                  ①  
  9.    cocos2d::Sprite* sprite;                                                                                                        ②  
  10. public:  
  11.    
  12.    static cocos2d::Scene* createScene();  
  13.    virtual bool init();   
  14.      
  15.     voidOnAction(cocos2d::Ref* pSender);                                                                                       ③  
  16.      
  17.    CREATE_FUNC(HelloWorld);  
  18.    
  19. };  
  20.    
  21. #endif // __HELLOWORLD_SCENE_H__  

 

 

第①行代码是声明一个布尔变量isPlaying,用来保存播放状态,true时候说明正在播放,false时候说明停止播放。第②行代码cocos2d::Sprite*sprite是声明一个精灵变量。第③行声明了一个函数,用来在选择不同菜单时候的回调。

 

[html] view plaincopy
 
  1. HelloWorldScene的实现代码HelloWorldScene.ccp文件,其中HelloWorld::init()函数代码如下:  
  2. bool HelloWorld::init()  
  3. {  
  4.     if( !Layer::init() )  
  5.     {  
  6.          returnfalse;  
  7.     }  
  8.    
  9.     SizevisibleSize = Director::getInstance()->getVisibleSize();  
  10.     Pointorigin = Director::getInstance()->getVisibleOrigin();  
  11.    
  12.     SpriteFrameCache::getInstance()->addSpriteFramesWithFile("run.plist");  
  13.    
  14.     autobackground = Sprite::createWithSpriteFrameName("background.png");  
  15.     background->setAnchorPoint(Point::ZERO);  
  16.     this->addChild(background,0);  
  17.    
  18.     spriteSprite::createWithSpriteFrameName("h1.png");  
  19.     sprite->setPosition(Point(visibleSize.width/2,visibleSize.height /2));  
  20.     this->addChild(sprite);  
  21.    
  22.     isPlayingfalse;  
  23.      
  24.          //toggle菜单  
  25.     autogoSprite = Sprite::createWithSpriteFrameName("go.png");                                                 ①  
  26.     autostopSprite = Sprite::createWithSpriteFrameName("stop.png");                                           ②  
  27.     autogoToggleMenuItem = MenuItemSprite::create(goSprite, goSprite);                                    ③  
  28.  auto stopToggleMenuItem = MenuItemSprite::create(stopSprite,stopSprite);                            ④  
  29.  auto toggleMenuItem = MenuItemToggle::createWithCallback(  
  30.                     CC_CALLBACK_1(HelloWorld::OnAction,this),  
  31.                           goToggleMenuItem , stopToggleMenuItem, NULL);                                             ⑤  
  32.     toggleMenuItem->setPosition(Director::getInstance()->convertToGL(Point(930,540)));                   ⑥  
  33.    auto mn = Menu::create(toggleMenuItem, NULL);  
  34.    mn->setPosition(Point::ZERO);  
  35.    this->addChild(mn);  
  36.    
  37.     returntrue;  
  38. }  

 

 

上述代码第①行是创建Go按钮精灵,对应的第③行代码是创建Go按钮(菜单项)。代码第②行是创建Stop按钮精灵,对应的第④行代码是创建Stop按钮(菜单项)。在第⑤行代码是创建Go和Stop是两种状态切换的开关菜单项。第⑥行代码是设置开关菜单项的位置。

HelloWorldScene的实现代码HelloWorldScene.ccp文件,其中HelloWorld::OnAction(Ref*pSender)函数代码如下:

 

[html] view plaincopy
 
  1. void HelloWorld::OnAction(Ref* pSender)  
  2. {  
  3.      
  4.     if(!isPlaying) {  
  5.    
  6.          ///////////////动画开始//////////////////////  
  7.          Animation*animation = Animation::create();                                                                    ①  
  8.          for(int i=1; i<= 4; i++)  
  9.          {  
  10.              __String*frameName = __String::createWithFormat("h%d.png",i);                                    ②  
  11.              log("frameName= %s",frameName->getCString());  
  12.              SpriteFrame*spriteFrame = SpriteFrameCache::getInstance()->  
  13.                                        getSpriteFrameByName(frameName->getCString());                                  ③  
  14.              animation->addSpriteFrame(spriteFrame);                                                                           ④  
  15.          }  
  16.    
  17.          animation->setDelayPerUnit(0.15f);           //设置两个帧播放时间                             ⑤  
  18.          animation->setRestoreOriginalFrame(true);    //动画执行后还原初始状态                   ⑥  
  19.    
  20.          Animate*action = Animate::create(animation);                                                                          ⑦  
  21.          sprite->runAction(RepeatForever::create(action));                                                         ⑧  
  22.          //////////////////动画结束///////////////////  
  23.    
  24.          isPlayingtrue;  
  25.    
  26.     }else {         
  27.          sprite->stopAllActions();                                                                                               ⑨  
  28.          isPlayingfalse;  
  29.     }  
  30. }  

 

 

上述第①行代码是创建一个Animation对象,它是动画对象,然后我们要通过循环将各个帧图片放到Animation对象中。第②行是获得帧图片的文件名,String类型是Cocos2d-x字符串数据类型。第③行代码是通过帧名创建精灵帧对象,第④行代码把精灵帧对象添加到Animation对象中。

第⑤行代码是animation->setDelayPerUnit(0.15f)是设置两个帧播放时间,我们这个动画播放是4帧。第⑥行代码animation->setRestoreOriginalFrame(true)是动画执行完成是否还原到初始状态。第⑦行代码是通过一个Animation对象创建Animate对象,第⑧行代码sprite->runAction(RepeatForever::create(action))是执行动画动作,无限循环方式。

第⑨行代码sprite->stopAllActions()停止所有的动作。

 

 

更多内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》
本书交流讨论网站:http://www.cocoagame.net
更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群:257760386


《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:

京东:http://item.jd.com/11584534.html

亚马逊:http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当:http://product.dangdang.com/23606265.html

互动出版网:http://product.china-pub.com/3770734

 

《Cocos2d-x实战 C++卷》源码及样章下载地址:

源码下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

样章下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

欢迎关注智捷iOS课堂微信公共平台
分享到:
评论

相关推荐

    cocos2d-x游戏开发之旅

    钟迪龙所著的《Cocos2d-x游戏开发之旅(附光盘)》介绍Cocos2d-x的基础知识:基本知识、基本结构、控件、动作以及屏幕触摸事件的使用。介绍Cocos2d-x更高阶的内容,包括渲染效率的提高、动画、TexturePacker图片打包、...

    Cocos2d x手机游戏开发与项目实战详解.part3

     第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理...

    Cocos2d x手机游戏开发与项目实战详解.part1

     第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理...

    Cocos2d x手机游戏开发与项目实战详解.part2

     第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理...

    Cocos2D-X 2.2手机游戏开发完整包

    Cocos2D-X v2.2.0完整源代码,并且包含最新的CocoStudio的动画和UI解析代码,及相应实例。 Cocos2dx_v2.1.4b_hotfix更新内容: 1.修正ui windows,ios,android的编译错误。 2.修正cocos 2.1.4 WatermelonWithMe 和...

    IOS 开发源码:cocos2dx+box2d的库和演示实例

    IOS 开发源码:cocos2dx+box2d的库和演示实例.包含cocos2d-x的库和box2d的库,实现模拟物理碰撞、弹跳的源码

    Learn iPhone and iPad cocos2d Game Development

     6.4.4 在cocos2d中使用纹理图册  6.4.5 改进ccanimation辅助类别  6.4.6 将所有图像都放入一个纹理图册中  6.5 自己动手  6.6 本章小结 第7章 滚屏射击游戏(上)  7.1 高级视差滚屏  7.1.1 将背景创建为底纹 ...

    跑酷游戏 cocos creator

    跑酷游戏 cocos creator 实例小游戏,初入门可以看一下,动画效果还不不错。

Global site tag (gtag.js) - Google Analytics