《Cocos2d-x实战:Lua卷》是著名移动开发专家关东升倾力创作的“Cocos2d-x实战”典藏大系之一!本书基于Cocos2d-x 3.2版本,系统论述Cocos2d-x之Lua开发的理论与实战。全书近500页,不仅系统梳理了Cocos2d-x开发的基本方法,并给出了100多个小的示例及综合案例。是一本Cocos2d-x开发入门实践指导百科全书。
推荐一:本书配合《Cocos2d-x实战:工具卷》学习。
推荐二:关东升老师录制了400课时的Cocos教学视频,读者可以登录“智捷课堂”在线学习。
《Cocos2d-x实战 Lua卷》是介绍Cocos2d-x Lua游戏编程和开发技术的书籍,介绍了使用Cocos2dx Lua中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台移植、程序代码管理、两大应用商店发布产品。全书分为六篇: 基础篇、进阶篇、数据与网络篇、优化篇、跨平台移植篇和实战篇,共23章。基础篇包括第1~8章,分别是Cocos2d-x Lua介绍、环境搭建、标签、菜单、精灵、场景、层、动作、特效、动画和用户事件。进阶篇包括第9~12章,分别是游戏音乐与音效、粒子系统、瓦片地图和物理引擎。数据与网络篇包括第13~15章,分别是数据持久化、基于HTTP的网络通信、Node.js与WebSocket网络通信。优化篇为第16章,主要介绍性能优化。跨平台移植篇包括第17章和第18章,分别是移植到Android平台和移植到iOS平台。实战篇包括第19~23章,分别是使用Git管理程序代码、项目实战——迷失航线手机游戏、为迷失航线游戏添加广告、发布放到Google play应用商店和发布放到苹果App Store。
第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源代码,需要到<Cocos2dx引擎目录>\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,选择<Cocos2dx引擎目录>。
图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运行到断点挂起
第一篇 基础篇
第1章 准备开始
1.1 本书学习路线图
1.2 使用实例代码
第2章 Lua语言基础
2.1 环境搭建
2.1.1 Lua编辑工具
2.1.2 HelloLua实例测试
2.2 标识符和保留字
2.2.1 标识符
2.2.2 保留字
2.3 常量和变量
2.3.1 常量
2.3.2 变量
2.3.3 命名规范
2.4 注释
2.5 Lua数据类型
2.5.1 数据类型
2.5.2 type函数
2.5.3 数据类型转换
2.6 运算符
2.6.1 算术运算符
2.6.2 关系运算符
2.6.3 逻辑运算符
2.6.4 运算优先级
2.7 控制语句
2.7.1 分支语句
2.7.2 循环语句
2.7.3 跳转语句
2.8 表类型
2.8.1 字典
2.8.2 数组
2.9 字符串类型
2.9.1 字符串截取
2.9.2 字符串转换
2.9.3 字符串查询
2.9.4 字符串格式化
2.10 函数
2.10.1 使用函数
2.10.2 变量作用域
2.10.3 多重返回值
2.11 闭包函数
2.11.1 嵌套函数
2.11.2 返回函数
2.11.3 使用闭包表达式
2.12 Lua中的面向对象
2.12.1 Lua中的对象
2.12.2 类的实现
本章小结
第3章 HelloCocos2d?xLua
3.1 移动平台游戏引擎介绍
3.2 Cocos2d游戏引擎
3.2.1 Cocos2d游戏引擎家谱
3.2.2 Cocos2d?x引擎
3.2.3 JavaScript和Lua绑定
3.3 搭建Cocos2d?xLua开发环境
3.3.1 搭建CocosCodeIDE开发环境
3.3.2 下载和使用Cocos2d?xLua官方案例
3.4 第一个Cocos2d?xLua游戏
3.4.1 创建工程
3.4.2 CocosCodeIDE中运行
3.4.3 工程文件结构
3.4.4 代码解释
3.5 重构HelloLua
3.6 Cocos2d?xLua核心概念
3.6.1 导演
3.6.2 场景
3.6.3 层
3.6.4 精灵
3.6.5 菜单
3.7 Node与Node层级架构
3.7.1 Node中重要的操作
3.7.2 Node中重要的属性
3.7.3 游戏循环与调度
3.8 Cocos2d?xLua坐标系
3.8.1 UI坐标
3.8.2 OpenGL坐标
3.8.3 世界坐标和模型坐标
本章小结
第4章 标签和菜单
4.1 使用标签
4.1.1 LabelTTF
4.1.2 LabelAtlas
4.1.3 LabelBMFont
4.1.4 Cocos2d?x3.x标签类Label
4.2 使用菜单
4.2.1 文本菜单
4.2.2 精灵菜单和图片菜单
4.2.3 开关菜单
本章小结
第5章 精灵
5.1 Sprite精灵类
5.1.1 创建Sprite精灵对象
5.1.2 实例:使用纹理对象创建Sprite
5.2 精灵的性能优化
5.2.1 使用纹理图集
5.2.2 使用精灵帧缓存
本章小结
第6章 场景与层
6.1 场景与层的关系
6.2 场景切换
6.2.1 场景切换相关函数
6.2.2 场景过渡动画
6.3 场景的生命周期
6.3.1 生命周期函数
6.3.2 多场景切换生命周期
本章小结
第7章 动作、特效和动画
7.1 动作
7.1.1 瞬时动作
7.1.2 间隔动作
7.1.3 组合动作
7.1.4 动作速度控制
7.1.5 函数调用
7.2 特效
7.2.1 网格动作
7.2.2 实例:特效演示
7.3 动画
7.3.1 帧动画
7.3.2 实例:帧动画的使用
本章小结
第8章 用户事件
8.1 事件处理机制
8.1.1 事件分发器
8.1.2 触摸事件
8.1.3 实例:单点触摸事件
8.1.4 实例:多点触摸事件
8.1.5 键盘事件
8.2 加速度计与加速度事件
8.2.1 加速度计
8.2.2 加速计事件
8.2.3 实例:运动的小球
本章小结
……
第二篇 进阶篇
第三篇 数据与网络篇
第四篇 优化篇
第五篇 平台移植篇
第六篇 实战篇