第一部分 | 第1章 —— Hello Cocos2d-x


在这一章中,咱们将与全部程序设计入门书同样,从Hello World这个最简单的例子开始介绍Cocos2d-x引擎。首先介绍一下Cocos2d-x的概况;而后搭建Windows下的开发环境,并动手实践第一个Hello World程序;接着分析Cocos2d-x程序的的基本结构;最后展现了各类例子。node



起源:Cocos2d-x的原型是Cocos2d,一个最先来源于几位Python开发者在PyWeek竞赛中的做品。目的是封装底层绘图代码,简化2D游戏的开发过程,避免每次都“重复发明轮子”。有了Cocos2d开发者就能够没必要关心绘图的细节,把所有精力集中在游戏开发上。最先发布于2008年4月,并一直保持版本的的更新。编程

发展:在Cocos2d发布的同年3月,苹果发布了iOS的SDK,容许第三方开发者为iOS设备开发各类应用,其中游戏应用是最热门的。为了简化苹果游戏的开发难度,把你们从复杂的OpenGL编程中解救出来,Ricardo Quesada将Cocos2d从Python移植到了iOS上,并使用iOS的原生语言Object-C重写了游戏引擎。2008年11月,Cocos2d-iPhone引擎正式开源,发布了0.1版,为2D游戏的开发提供了一种便利的解决方案。随着苹果手机的大流行,Cocos2d-iPhone引擎也在逐步的完善,这得益于社区内世界各地的开发者们的贡献,而且发展速度大大超过了Python版本。因为Cocos2d的易用性,使用Cocos2d-iPhone开发的游戏数量也日渐增多,至今已经有2500多个游戏在App Store上架。让咱们来膜拜一下Ricardo Quesada大神,感谢他为游戏行业所作的贡献。
app

兴盛:因为Android异军突起,大大带动了移动端的游戏市场,也由此产生了一个迫切的需求,即开发者须要将游戏同时部署在两个热门的平台上,可是一个游戏维护两套代码的代价显然是很是昂贵的,尤为是两个平台的主流语言、主流引擎都彻底不一样的状况下。所以,基于C++语言,以Cocos2d-iPhone为基础开发的Cocos2d-x出现了,它凭借其从语言到接口的跨平台特性,受到了游戏开发者的普遍关注。使用Cocos2d-x开发的游戏已经能够作到了“代码通用”,只须要少许的调整,就能够移植到包括iOS、Android、Windows、Linux在内的诸多平台。函数

历程:Cocos2d(Python) -> Cocos2d-iPhone(Object-C) -> Cocos2d-x(C++)学习

本质:让我来用一句话归纳,Cocos2d-x对SDK进行了封装、抽象、和扩展。它其实就是一个跨平台的图形引擎,它封装了复杂的图形接口,经过抽象出精灵、动做等概念,下降了游戏开发的难度,简化了开发过程。同时Cocos2d-x还进行了不少扩展,包括一套Object-C风格的基础类系、平台无关的多点触摸协议、重力感应和音频系统等。测试

特性:下面简单的介绍一下Cocos2d-x的11个特性。优化

特性 描述
流程控制flow control 很是容易管理不一样场景(Scene)之间的流程控制。
精灵sprite 快速完方便的精灵用于显示一切可见的元素。
节点node 基于树结构的分层组织方式,方便管理不一样层次的游戏元素,同时提供了统一管理的计时器(scheduler)。
动做action 应用于精灵或其余游戏元素的动画效果,能够组合成复杂的动做。如移动(move)、旋转(rorate)和缩放(scale)等。
特效effect 包括波浪(wave)、旋转(twirl)和透镜(lens)等视觉特效。
平面地图tiled map 支持矩形和六边形的平面地图。
菜单menu 建立游中经常使用的菜单。
用户输入 提供接受用户触摸事件、传感器(如加速度计)等输入的简单解决方案。
文档document 编程指南、API参考、视频教学以及不少简单可靠的测试样例。
MIT许可 免费开发的协议,可是请谨记尊重版权。
基于OpenGL 深度优化的绘图方式,支持硬件加速。



使用Cocos2d-x最大的便利就是能够在PC或Mac环境下完成游戏开发,而后再移植到移动设备上,如今以Windows开发平台为例来说解一下环境的搭建。动画

第一步:安装Windows系统和Visual Studio 2010。我用的是Windows 10专业工做站版。设计

第二步:找到cocos2d-2.0-x-2.0.4安装包。若是找不到能够发封邮件给我,但我不必定回复。3d

第三步:找到cocos2d-2.0-x-2.0.4目录下的install-templates-msvc.bat运行,安装VS模板,成功后下如图

第四步:找到cocos2d-2.0-x-2.0.4目录下的cocos2d-win32.vc2010.sln双击打开,编译Cocos2d-x解决方案

第五步:把解决方案中的HelloCpp设为启动项目后运行,若是出现下图则成功了,到此环境搭建完成。



完成开发环境的搭建后,咱们来尝试动手建立人生中的第一个Cocos2d-x项目吧,也就是Hello World,具体步骤以下

第一步:打开VS选择Cocos2d-x模板,选择Cocos2d-win32 Application项目,名称为“HelloCocos”,点肯定后再点Finish。

第二步:直接编译是会出错的,由于缺乏不少头文件和库文件,最简单的方法就是把整个Cocos2d-x目录里的文件复制过来。

第三步:不用作任何修改,直接编译运行项目,一次经过会显示下面图片就成功了,这就是咱们的小不点出来了。

第四步:已经没有第四步了,但咱们永远也不要中止学习的脚步,如今我来给它加个标签显示“Hello Cocos”。

在HelloWorldScene.cpp文件中加入上面的三行代码便可实现想要的效果。这是一个最简单的类标签类CCLabelTTF。



这一节用文字描述的比较多,我尽可能用简单的语言讲清楚,若是一件事讲不清楚,说明我尚未理解透彻,下面要学习文件夹和文件、类和成员函数。

Hello World —— 文件夹和文件

resource文件夹:用于存放游戏的图片、音频和配置等资源文件,默认为游戏运行时的目录,当前共有五个资源文件,其中HelloCocos.rc为Windows专有,其他都是图片。

include文件夹:游戏定义的头文件都存放在这个目录里,共有四个头文件,main.h和resource.h是平台相关文件为Windows专有,在不一样的平台下是不一样的。AppDelegate.h和HelloWorldScene.h是AppDelegate和HelloWorld两个类的定义文件,具体这两个类可参考下面的详细解释。

source文件夹:游戏的源代码都存放在这个目录里,共有三个源文件,main.cpp是平台相关文件为Windows专有,在不一样的平台下是不一样的。AppDelegate.cpp和HelloWorldScene.cpp是两个类的实现文件。Cocos2d-x的游戏结构能够简单的归纳为场景、层、精灵。AppDelegate.cpp中定义了AppDelegate这个类,它是程序的入口,管理游戏的生命周期。在HelloWorldScene.cpp中定义了一个HelloWorld类,该类公有继承自CCLayer,所以它是一个层,只不过这个层中带有一个静态成员函数能够建立一个场景,但HelloWorld并非场景类。层能够加到入场景,但场景不能加到入层里,这一点须要注意一下。

Hello World —— 类和成员函数

AppDelegate:公有继承于CCApplication,我喜欢管这个类叫奥力给,它是Cocos2d-x项目的程序入口文件,控制着游戏的生命周期,除去构造函数和析构函数外共有3个方法。

AppDelegate::applicationDidFinishLaunching:应用程序启动后将调用这个方法,这段代码首先对引擎进行必要的初始化,整个游戏有且只有一个pDirector,它是导演,制做游戏和拍电影同样,全部的事情都归导演管一我的管理。而后开启FPS即每秒帧率,而后设置绘制间隔为每秒在屏幕上显示60张图片,通常每秒显示23张图片人眼就不会感受到卡顿了。最后建立了一个Hello World场景,并告诉导演运行这个场景,对于游戏开发者,在告诉导演运行场景以前,要把全部的初始化工做都完成。

AppDelegate::applicationDidEnterBackground:当你正玩着游戏的时候,忽然来了一个重要电话,此时能够先把游戏切到后台接个电话,这时候就产生了一个事件,回调这个成员函数,它自己不会本身运行,而是由于被玩家或系统切换到后台的时候回调的。游戏开发者至关于总监,让导演来无条件执行各类工做,具体工做由导演去作。

AppDelegate::applicationWillEnterForeground:这个函数也是一个事件的回调函数,当从后台切换回来继续玩游戏的时候,就产生了一个事件,回调这个成员函数,试想一下,你挂断了电话还想继续游戏,那么就得把游戏从后台切换回来。

HelloWorld:公有继承于CCLayer,是层的一个子类,因此这个类也是一个层。在Cocos2d-x中,场景和层都是不可见的游戏元素,只有精灵才是可见的。

HelloWorld::scene:建立并返回一个场景指针,有趣的是它却位于一个CCLayer的派生类中,在Cocos2d-x中,在层下设置一个建立场景的静态函数是一个常见的技巧,这样作的便利是咱们能够直接使用这个层的静态函数scene()来建立一个空场景,而后再把层放到这个空场景中。

HelloWorld::create:咱们并无看到这样的成员函数,实际上是用CREATE_FUNC(HelloWorld)宏来实现的。Cocos2d-x的源代码是由Object-C改过来的,因此也保留了不少iOS的编程风格,它并无像C++那样使用构造函数来初始化这个类,而是使用create()和init()来完成类的构造函数。

HelloWorld::menuCloseCallback:这个成员函数是selector的回调函数。也就是当咱们点了关闭以后要执行的动做。

HelloWorld::init:这个成员函数分为五个部分(初始化、建立菜单项、建立菜单、建立标签、建立背景)。首先调用父类的函数初始化层;其次建立一个有图标的菜单项;而后又建立了一个菜单,并使用上一步建立的菜单项;接着建立一个标签用来显示“Hello World”;最后建立一个背景图片。全部上面建立的对象都须要加入到层中才能最终显示出来。addChild把游戏元素加进来,它的第二个参数值越大表示显示的越靠前,最底层为0。setPosition用来设置位置,左下角为坐标原点。



Cocos2d-x在开发过程当中为了测试引擎的正确性,同时为了演示引擎各个部分如何使用为咱们提供了大量的示例,这些例子展现了Cocos2d-x引擎的不少标准用法,几乎涵盖了引擎的所有功能,颇有参考价值。把源码中的TestCpp项目设为启动项,左边是TestCpp运行后的效果,右边是第一个例子Actions Test。



第1节主要讲述了Cocos2d-x的起源、发展、兴盛和特性,从本质上说Cocos2d-x就是一个图形引擎,它是对SDK的封装、抽象和扩展,让开发者从复杂和枯燥的API编程中解放出来,这很像微软的MFC类库。

第2节教咱们如何搭建开发环境,若是一点也不懂C++或者不能运行HellCpp请不要继续往下看了,这本书不适合你,先学学C++再看吧,由于全书都在教你如何使用各类类。这个版本大约有500多个类,而Cosos2d-x大量的使用单类。

第3节只要咱们按照步骤一步一步的进行,就能够建立出咱们第一个Cocos2d-x项目,同时也简单的使用了第一个类CCLabelTTF,全部的Cocos2d-x类都是以CC开头的,也许是Cocos2d-x的缩写,也许是Cocos2d-x Class的首字母。

第4节详细的介绍了每个文件夹、文件、类和成员函数,特别是在成员函数上作了详细的解释,由于每个Cocos2d-x项目都包含这些。任何能够呈现出来的都叫游戏元素,场景和层是不可见的游戏元素,全部可见的游戏元素都叫精灵,全部的游戏元素都归惟一的导演管,制做游戏和拍电影很像,开发者就是总监,CCDirector就是导演。

第5节是观赏课,让咱们看看Cocos2d-x能作出什么样的效果出来,这里一方面为了测试引擎各部分功能,一方面是教咱们引擎的标准用法。

实战:不动手等于白学,建立第一个Cocos2d-x项目Hello Cocos并运行成功才算是本章通关了。

总结:本章的信息量很大,涉及的类有CCApplication、CCDirector、CCScene、CCLayer、CCMenuItemImage、CCMenu、CCLabelTTF、CCSize、CCSprite、CCObject、CCEGLView、SimpleAudioEngine,除了这些类一有一些宏和类的成员函数调用。暂时先没必要纠结于这些函数的具体用法细节,本章的重心就是动手能作出一个Hello Cocos就行。