文档章节

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

智捷课堂
 智捷课堂
发布于 2014/07/15 16:18
字数 804
阅读 93
收藏 2

下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击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()停止所有的动作。

 

 

更多内容请关注Cocos2d-x系列图书《Cocos2d-x实战(卷Ⅰ):C++开发》

本书交流讨论网站:http://www.cocoagame.net

欢迎加入cocos2d-x技术讨论群:257760386、327403678


© 著作权归作者所有

智捷课堂

智捷课堂

粉丝 40
博文 239
码字总数 215495
作品 0
东城
私信 提问
加载中

评论(0)

Cocos2d-x Lua中实例:帧动画使用

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

智捷课堂
2015/05/24
187
0
如何使用拼合图播放一个序列帧动画

红孩儿Cocos2d-x学习园地教学资料由 [红孩儿游戏编程教学组] 组织编写.版权所有,盗文必究! 如何使用拼合图播放一个序列帧动画 本节主讲:红孩儿 [注:本版使用Cocos2d-x 2.02版本] 我们知道,...

长平狐
2013/03/19
2.6K
0
使用CocosBuilder2.1结合cocos2d-x2.0.3创建动画场景

原文地址:http://article.ityran.com/archives/2140 本为由泰然教程组成员 浅底 原创,作为一位经验丰富的游戏开发人员,这次浅底将CocosBuilder经验分享给大家,希望大家喜欢,欢迎拍砖!!...

乐逍遥jun
2016/02/22
36
0
序列帧动画

简介 Cocos2d-x中,动画的具体内容是依靠精灵显示出来的,为了显示动态图片,我们需要不停切换精灵显示的内容,通过把静态的精灵变为动画播放器从而实现动画效果。动画由帧组成,每一帧都是一...

xinxinitblog
2015/02/07
0
0
《Cocos2d-x实战 Lua卷》上线了

感谢大家一直以来的支持! 各大商店均开始销售: 京东:http://item.jd.com/11659697.html 当当:http://product.dangdang.com/23659810.html 《Cocos2d-x实战 Lua卷》源码及样章下载地址: ...

智捷课堂
2015/03/26
219
1

没有更多内容

加载失败,请刷新页面

加载更多

易鑫车贷人工客服电话是多少

易鑫车贷人工客服电话是多少O29-63O37558人工客服电话O29-688O2826方法,大家可以采取一些传统的方式,比如说打开易鑫车贷,然后设置,就会看到帮助与反馈的字眼,然后大家打开这到各种各样的问题...

fgrf
今天
41
0
IntelliJ 如何找到项目中 Deprecated 的方法

在一个项目中,如果我们标记了某些元素为 Deprecated 的话,如何让我们能够快速找到? 简单来说,你可以对项目进行 Code Inspection。 选择 Analyze > Inspect Code 在弹出的对话框中,对整个...

honeymoose
今天
85
0
Java中的排序算法:冒泡排序

学习了一种新的排序算法:冒泡排序,冒泡排序是一种交换排序,指比较相邻的两个元素,如果前者比后者大,就交换位置,继续进行比较。 通过例子来实现: import java.util.Arrays; public cl...

北芷南姜
今天
73
0
OSChina 周五乱弹 —— 你不仅要背负工作,还要背负领导

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《Cold Rain》- AniFace 手机党少年们想听歌,请使劲儿戳(这里) @明月依稀 :露...

小小编辑
今天
441
4
个人环境之ubuntu的apt-get 总结

前言 apt-get是必须要学会的,如果搞定apt-get,可解决很多问题。接下来鸟才啊总结以往经验。 场景一 指定安装版本 先查看有软件有那些版本可以安装 apt-cache madison gcc-4.8 gcc-4.8 ...

鸟菜啊
今天
67
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部