下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画。
下面我们再看看具体的程序代码,首先看一下看HelloWorldScene.h文件,它的代码如下:
- #ifndef __HELLOWORLD_SCENE_H__
- #define __HELLOWORLD_SCENE_H__
- #include "cocos2d.h"
- class HelloWorld : public cocos2d::Layer
- {
- bool isPlaying; //播放标识 ①
- cocos2d::Sprite* sprite; ②
- public:
- static cocos2d::Scene* createScene();
- virtual bool init();
- voidOnAction(cocos2d::Ref* pSender); ③
- CREATE_FUNC(HelloWorld);
- };
- #endif // __HELLOWORLD_SCENE_H__
第①行代码是声明一个布尔变量isPlaying,用来保存播放状态,true时候说明正在播放,false时候说明停止播放。第②行代码cocos2d::Sprite*sprite是声明一个精灵变量。第③行声明了一个函数,用来在选择不同菜单时候的回调。
- HelloWorldScene的实现代码HelloWorldScene.ccp文件,其中HelloWorld::init()函数代码如下:
- bool HelloWorld::init()
- {
- if( !Layer::init() )
- {
- returnfalse;
- }
- SizevisibleSize = Director::getInstance()->getVisibleSize();
- Pointorigin = Director::getInstance()->getVisibleOrigin();
- SpriteFrameCache::getInstance()->addSpriteFramesWithFile("run.plist");
- autobackground = Sprite::createWithSpriteFrameName("background.png");
- background->setAnchorPoint(Point::ZERO);
- this->addChild(background,0);
- sprite= Sprite::createWithSpriteFrameName("h1.png");
- sprite->setPosition(Point(visibleSize.width/2,visibleSize.height /2));
- this->addChild(sprite);
- isPlaying= false;
- //toggle菜单
- autogoSprite = Sprite::createWithSpriteFrameName("go.png"); ①
- autostopSprite = Sprite::createWithSpriteFrameName("stop.png"); ②
- autogoToggleMenuItem = MenuItemSprite::create(goSprite, goSprite); ③
- auto stopToggleMenuItem = MenuItemSprite::create(stopSprite,stopSprite); ④
- auto toggleMenuItem = MenuItemToggle::createWithCallback(
- CC_CALLBACK_1(HelloWorld::OnAction,this),
- goToggleMenuItem , stopToggleMenuItem, NULL); ⑤
- toggleMenuItem->setPosition(Director::getInstance()->convertToGL(Point(930,540))); ⑥
- auto mn = Menu::create(toggleMenuItem, NULL);
- mn->setPosition(Point::ZERO);
- this->addChild(mn);
- returntrue;
- }
上述代码第①行是创建Go按钮精灵,对应的第③行代码是创建Go按钮(菜单项)。代码第②行是创建Stop按钮精灵,对应的第④行代码是创建Stop按钮(菜单项)。在第⑤行代码是创建Go和Stop是两种状态切换的开关菜单项。第⑥行代码是设置开关菜单项的位置。
HelloWorldScene的实现代码HelloWorldScene.ccp文件,其中HelloWorld::OnAction(Ref*pSender)函数代码如下:
- void HelloWorld::OnAction(Ref* pSender)
- {
- if(!isPlaying) {
- ///////////////动画开始//////////////////////
- Animation*animation = Animation::create(); ①
- for(int i=1; i<= 4; i++)
- {
- __String*frameName = __String::createWithFormat("h%d.png",i); ②
- log("frameName= %s",frameName->getCString());
- SpriteFrame*spriteFrame = SpriteFrameCache::getInstance()->
- getSpriteFrameByName(frameName->getCString()); ③
- animation->addSpriteFrame(spriteFrame); ④
- }
- animation->setDelayPerUnit(0.15f); //设置两个帧播放时间 ⑤
- animation->setRestoreOriginalFrame(true); //动画执行后还原初始状态 ⑥
- Animate*action = Animate::create(animation); ⑦
- sprite->runAction(RepeatForever::create(action)); ⑧
- //////////////////动画结束///////////////////
- isPlaying= true;
- }else {
- sprite->stopAllActions(); ⑨
- isPlaying= false;
- }
- }
上述第①行代码是创建一个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实战 C++卷》现已上线,各大商店均已开售:
京东:http://item.jd.com/11584534.html
当当: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
相关推荐
总的来说,《Cocos2d-x 3.x游戏开发实战》是一本全面覆盖Cocos2d-x 3.x开发技术的指南,它不仅教授基本概念和技术,还通过实例深入解析游戏开发的各个层面。无论你是初学者还是有一定经验的开发者,这本书都能提供...
通过分析和学习这些源码,开发者可以深入理解cocos2d-x的底层机制,包括场景管理、精灵(Sprite)绘制、粒子系统、物理引擎、动画帧序列、声音播放、用户输入处理等核心功能。同时,还可以了解到游戏状态管理、碰撞...
《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...
总的来说,这个cocos2d-x游戏实例将涵盖游戏开发的多个核心领域,包括UI设计、物理模拟、动画制作、事件处理、内存管理等,对于想要深入学习Cocos2d-x游戏开发的初学者来说,这是一个非常有价值的实践项目。...
《Cocos2d-x实战 JS卷》是一本深入探讨Cocos2d-x游戏开发的专著,主要聚焦于使用JavaScript语言进行游戏编程。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动设备和桌面平台,支持iOS、Android、Windows等多...
本实例“愤怒的松鼠”是基于cocos2d-x框架编写的一款游戏,提供了完整的源代码,对于学习和理解cocos2d-x的使用方法以及游戏开发流程具有极高的参考价值。 首先,让我们深入了解cocos2d-x的核心特性。cocos2d-x提供...
《Cocos2d-x实战 Lua卷》是一本深入讲解Cocos2d-x游戏开发的书籍,专注于使用Lua脚本语言进行编程。Cocos2d-x是一个开源的游戏开发框架,广泛应用于2D游戏、教育应用和各种互动媒体项目。这本书的源码提供了丰富的...
《cocos2d-x 3.x游戏开发实战光盘》是一个深入探讨cocos2d-x 3.x游戏引擎开发的资源集合,旨在帮助开发者通过实际案例掌握这一强大的2D游戏开发工具。cocos2d-x是一款开源的游戏开发框架,基于C++,广泛应用于跨平台...
这个分享的"Cocos2d-x的spine动画demo"很可能就是一个完整的实例,包含了创建、加载和播放Spine动画的所有步骤。通过分析和运行这个示例,开发者可以快速了解如何在自己的游戏中实现类似的动画效果。 为了深入学习...
本实例将带你深入理解如何使用cocos2d-x创建一个简易的动作游戏,帮助开发者掌握其核心概念和技术。 一、cocos2d-x框架概述 1. 跨平台性:cocos2d-x支持iOS、Android、Windows等多个平台,开发者只需编写一次代码...
《精通COCOS2D-X游戏开发进阶卷》是一本深入探讨Cocos2d-x游戏引擎的专业书籍,旨在帮助开发者提升在Cocos2d-x框架下的游戏制作技能。Cocos2d-x是一款广泛使用的开源游戏开发框架,它基于C++,同时也支持Lua和...
"地图系统的使用"章节将介绍Cocos2d-x中的Tiled Map功能,如何加载TMX格式的地图文件,以及如何进行地图对象的操作,这对于创建复杂的游戏关卡至关重要。 "让人物动起来"将深入到角色的动态行为设计,讲解如何使用...
这个“Cocos2d-X游戏源码大合集.rar”文件显然包含了大约三十个使用Cocos2d-X开发的游戏实例源代码,对于学习和理解Cocos2d-X游戏开发的原理、技巧以及实践应用具有极大的价值。 1. **Cocos2d-X基础**: Cocos2d-X...
本文将围绕“基于cocos2d-2.0-x-2.0.3的游戏实例——魔塔(win版)”这一主题,深入探讨如何利用cocos2d-x 2.0.3版本进行游戏开发,并结合实例分析关键知识点。 首先,我们需要了解cocos2d-x 2.0.3的核心特性。这个...
《Cocos2d-x 3.X游戏开发入门精解》是一本专为初学者设计的指导书籍,旨在帮助读者快速掌握使用Cocos2d-x 3.X框架进行游戏开发的基本技能。Cocos2d-x是一个开源的游戏开发框架,广泛应用于跨平台游戏开发,支持iOS、...
Cocos2d-Js是Cocos2d-x家族的一员,是一个跨平台的、基于JavaScript的开源游戏引擎,支持创建2D游戏、交互式图书和其他富媒体应用。通过Cocos2d-Js,开发者可以用一种语言编写代码,然后在多个平台上运行,包括Web、...
在游戏开发领域,cocos2d-x是一款广泛使用的开源2D游戏引擎,它支持多平台,包括iOS、Android以及桌面平台。本示例主要讲解如何在cocos2d-x环境中播放Flash序列帧动画,这对于创建动态游戏场景和角色动作至关重要。 ...
Cocos2d-x是一款开源的游戏开发框架,广泛用于2D游戏、交互式应用程序和教育软件的制作。2.x版本是其历史上的一个重要阶段,提供了丰富的功能和改进。在这个"cocos2d-x 2.x action集合(详细注释分类)"的资源中,你将...
本教程将详细介绍如何使用Cocos2d-x 3.8框架来开发类似Flappy Bird的游戏,这对于初学者来说是一次很好的实践机会,能够深入理解游戏开发的基本原理和Cocos2d-x引擎的使用。 Cocos2d-x是一款开源的2D游戏开发框架,...
【cocos2d-x 摇杆】是游戏开发中常用的一种交互元素,它允许玩家通过虚拟摇杆来控制游戏对象的移动。在cocos2d-x这个2D游戏开发框架下,摇杆的实现涉及到多个组件和技术。下面将详细阐述cocos2d-x摇杆的实现原理和...