第3章Hello Cocos2dx Lua
在开始详细介绍Cocos2dx Lua引擎的API之前,有必要先了解一下手机游戏引擎有哪些和了解Cocos2dx Lua的前世今生。
然后从一个HelloLua入手,介绍Cocos2dx Lua的基本开发流程、Cocos2dx Lua生命周期以及Cocos2dx Lua核心知识体系。
3.1移动平台游戏引擎介绍
游戏引擎是指一些已编写好的游戏程序模块。游戏引擎包含渲染引擎(即“渲染器”,包括二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理等子系统。
在目前移动平台游戏引擎中主要可以分为2D和3D引擎。2D引擎主要有Cocos2diphone、Cocos2dx、Cocos2dJS、Corona SDK、Construct 2、WiEngine和Cyclone 2D,3D引擎主要有Unity 3D、Unreal Development Kit、ShiVa 3D和Marmalade。此外还有一些针对于HTML 5的游戏引擎,如Cocos2dhtml5、XCanvas和Sphinx等。
这些游戏引擎各有千秋,但是目前得到市场普遍认可的2D引擎是Cocos2diphone、Cocos2dx和Cocos2dJS,3D引擎是Unity 3D。
3.2Cocos2d游戏引擎
Cocos2diphone、Cocos2dx和Cocos2dJS是目前最流行的2D游戏引擎。它们属于同一家族,具有相同的API。
3.2.1Cocos2d游戏引擎家谱
在介绍Cocos2dx Lua之前有必要先介绍一下Cocos2d的家谱,如图31所示是Cocos2d的家谱。
图31Cocos2d的家谱
Cocos2d最早是由阿根廷的Ricardo和他的朋友使用Python开发的,后移植到iPhone平台,使用的语言是ObjectiveC。随着在iPhone平台取得了成功,Cocos2d引擎变得更加多元化,将对其中各个引擎介绍如下。
ShinyCocos: 使用Ruby对Cocos2diphone进行封装,使用Ruby api开发。
CocosNet: 是在MonoTouch平台上使用的Cocos2d引擎,采用.NET实现。
Cocos2dandroid: 是为Android平台使用的Cocos2d引擎,采用Java实现。
Cocos2dandroid1: 是为Android平台使用的Cocos2d引擎,采用Java实现,由国内人员开发的。
Cocos2djavascript: 是采用Javascript脚本语言实现的Cocos2d引擎。
Cocos2dx: 是采用C++实现的Cocos2d引擎,它是由Cocos2dx团队开发的分支项目。
Cocos2dJS: 是采用JavaScriptAPI的Cocos2d引擎,一方面它可以绑定在Cocos2dx上开发基于本地技术的游戏; 另一方面依托浏览器运行,开发基于Web的网页游戏。它也是由Cocos2dx团队开发的分支项目。
此外,历史上Cocos2d还出现过很多分支,随着技术的发展这些逐渐消亡了,其中最有生命力的当属Cocos2dx和Cocos2dJS引擎了。
3.2.2Cocos2dx引擎
Cocos2dx设计目标如图32所示。横向能够支持各种操作系统,桌面系统包括Windows、Linux和Mac OS X,移动平台包括iOS、Android、Windows Phone、Bada、BlackBerry和MeeGo等。纵向方面向下能够支持OpenGL ES1.1、OpenGL ES1.5和OpenGL ES2.0,以及DirectX11等技术,向上支持JavaScript和Lua脚本绑定。
图32Cocos2dx设计目标
简单说Cocos2dx设计目标是为了实现跨平台,而不再为同一款游戏在不同平台发布而进行编译了。而且Cocos2dx为程序员考虑的更多,很多程序员可能对于C++不熟悉,针对这种情况可以使用JavaScript和LuaLua是一个小巧的脚本语言,是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组(Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo)于1993年开发。——引自于百度百科http://baike.baidu.com/view/416116.htm?fr=wordsearch开发游戏。
3.2.3JavaScript和Lua绑定
Cocos2dx设计得非常巧妙,可以绑定JavaScript和Lua脚本语言,使得不熟悉C++的人员也能使用Cocos2dx引擎开发游戏,Cocos2dx不使用C++语言的API,而是使用JavaScript和Lua语言API。Cocos2dx绑定JavaScript和Lua脚本原理如图33所示。
图33Cocos2dx绑定JavaScript和Lua脚本
从图33可知,通过Cocos2dx和Cocos2dJS引擎,程序员可以开发网页游戏和本地游戏。图中A线路和B线路都是给掌握JavaScript脚本的程序员准备的,通过A线路,使用Cocos2dJS引擎开发基于HTML5的网页游戏。同样的JavaScript代码,也可以通过B线路,使用js binding(js绑定)技术透过C++ API访问Cocos2dx引擎,开发本地游戏。使得同样的JavaScript代码就可以实现在不同平台下运行。
图33中的C线路是给熟悉C++的程序员准备的。通过C++ API访问Cocos2dx引擎,开发本地游戏。
图33中的D线路是本书重点介绍的内容,是为熟悉Lua脚本的程序员准备的。使用Lua binding(Lua绑定)技术透过C++ API访问Cocos2dx引擎,开发本地游戏,为统一概念,本书中Cocos2dx Lua绑定技术称为Cocos2dx Lua。
通过Cocos2dx和Cocos2dJS引擎Cocos2dx团队构建了自己的技术生态圈,通过这些引擎使得游戏开发越来越简单。
3.3搭建Cocos2dx Lua开发环境
使用Cocos2dx Lua开发游戏,主要的程序代码是Lua语言,因此,凡是能够开发Lua语言工具都适用于Cocos2dx Lua游戏开发。本书推荐Cocos Code IDE工具。
3.3.1搭建Cocos Code IDE开发环境
Cocos Code IDE是Cocos2dx团队开发的,用于开发Cocos2dJS和Cocos2dx Lua绑定的游戏工具,它是基于EclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。——引自于百度百科http://baike.baidu.com/subview/23576/9374802.htm平台的开发工具,Eclipse基于Java的要想运行Cocos Code IDE工具,需要安装JDK或JRE,JDK是Java开发工具包,JRE是Java运行环境。
1. JDK
JDK的安装和设置见2.1.1节。
2. Cocos Code IDE的下载和安装
Cocos Code IDE的下载地址是http://www.cocos2dx.org/download,在浏览器中的页面如图34所示。选择合适的文件下载,目前包括了Mac OS X版本和Windows版本,注意Windows有32位和64位之分,还有安装(Setup)版本和压缩(Zip)版本之分。
图34下载Cocos Code IDE
下载cocoscodeidewin641.0.0rc1.zip解压版本,解压后找到Cocos Code IDE.exe文件,运行可以启动Cocos Code IDE工具,在启动过程中需要选择Workspace目录,如图35所示,Workspace目录是工程的管理目录,选择好之后单击OK按钮,如果该目录不存在则重新创建。
图35选择Workspace
Cocos Code IDE的具体使用方法下面章节再介绍。
3.3.2下载和使用Cocos2dx Lua官方案例
首先到Cocos2dx官方网站下载Cocos2dx开发包。Cocos2dx3.2下载解压后的目录结构如图36所示。
图36Cocos2dx 3.2开发包内容
如果要运行官方的案例可以进入到build目录,build目录中的内容如图37所示,这里包含了各个平台编
图37build目录内容
译和运行案例的工程等文件,其中cocos2d_tests.xcodeproj文件是Cocos2dx案例的Xcode工程文件,cocos2dwin32.vc2012.sln文件是Cocos2dx案例Win32平台下Visual Studio 2012解决方案文件,另外的cocos2dwp8.vc2012.sln文件是Cocos2dx案例Windows Phone 8平台下Visual Studio 2012解决方案文件。
如果在Window下学习和开发,一般运行cocos2dwin32.vc2012.sln解决方案就可以了。如果启动cocos2dwin32.vc2012.sln解决方案,进入如图38所示的Visual Studio 2012界面,其中的luatests工程是Cocos2dx官方提供的Cocos2dx Lua案例工程,需要选中luatests工程,右击选择“设置启动项目”,然后运行上方工具栏中的运行调试按钮,运行luatests工程。
图38Cocos2dx Lua案例
首次运行编译Cocos2dx时间会长一些,运行起来之后会看到一个Windows的窗口(如图39(a)所示),单击其中的一个菜单项可以运行相应的示例(如图39(b)所示)。
图39运行案例
如果想查看luatests源代码,需要到\tests\luatests目录下,使用文本编辑工具打开Lua代码文件查看。
3.4第一个Cocos2dx Lua游戏
编写的第一个Cocos2dx Lua程序命名为HelloLua,从该工程开始学习其他的内容。
3.4.1创建工程
创建Cocos2dx Lua工程可以通过Cocos2dx提供的命令工具Cocos实现,但这种方式不能与Cocos Code IDE集成开发工具很好地集成,不便于程序编写和调试。由于Cocos Code IDE工具是Cocos2dx开发的专门为Cocos2dJS和Cocos2dx Lua开发设计的,因此使用Cocos Code IDE工具创建Cocos2dx Lua工程很方便。
首先需要在Cocos Code IDE工具中先配置Lua框架,打开Cocos Code IDE工具,选择菜单Window→Preferences,弹出对话框如图310所示,选择Cocos→Lua在右边的Lua Frameworks,选择。
图310配置Lua框架
Lua框架配置不需要每次都进行,只需要在最开始时配置,但创建工程的时候,Cocos Code IDE工具会从这个Lua框架目录中创建工程文件。
接下来就可以创建Lua工程了,选择菜单File→New→Project,如图311所示,弹出项目类型选择对话框。
图311项目类型选择对话框
选中CocosLuaProject,然后单击Next按钮,弹出如图312所示的对话框。在Project Name项目中输入工程名称,Create Project in Workspace是在Workspace目录中创建工程,需要选中该项目,Create From Existing Resource项目选中可以在已经存在的工程创建,现在不需要选中该项目。
单击Next按钮进入如图313所示的配置运行环境对话框,在该对话框中可以配置项目运行时信息。Orientation是配置模拟器的朝向,其中landscape是横屏显示,portriat是竖屏显。Desktop Runtime Settings中的Title是设置模拟器的标题,Desktop Windows initialize Size是设置模拟器的大小。Add Native Codes是设置添加本地代码到工程。最后单击Finish按钮完成创建操作,创建好工程之后如图314所示。
图312新建项目对话框
图313配置运行环境对话框
图314创建工程成功界面
3.4.2Cocos Code IDE中运行
创建好工程后可以测试一下,在左边的工程导航面板中选中HelloLua工程,右击菜单选择Run As→Cocosluainding运行刚刚创建的工程,运行结果如图315所示。
图315运行工程界面
编写的程序代码在src目录下,在本例中,Lua文件负责处理如图316所示的场景界面逻辑。如果想调试程序,可以设置断点,如图317所示。单击行号之前的位置。
图316设置断点
右击选择Debug As→CocosLuabinding菜单。如图317所示,程序运行到第31行挂起,并进入调试视图,在调试视图中可以查看程序运行的堆栈、变量、断点、计算表达式和单步执行程序等操作。
图317运行到断点挂起