第1章
手机游戏
1.1 手机游戏市场
1.2 电脑游戏的世界
1.3 AndEngine范例
1.4 总结
1.5 习题
也许没有什么东西能像游戏精神这样无所不在—几乎每个人都喜欢玩某种游戏。而且,正如俗话说“每个人都至少能构思出一部好的小说”,毫不夸张地说,每个人也都至少有一个好的游戏点子。你可能有一个手机游戏的创意,否则就不会翻开这本书了。本书旨在讲解如何编写游戏,使之运行在Android手机上。不管要开发的游戏是和范例游戏很相似,还是与之差别很大,本书都会带领读者用流行的AndEngine游戏引擎来制作2D手机游戏并将其发布到Android Market上。
对于许多人来说,软件开发本身就是一个游戏—一个无休止的解谜游戏,我们在其中试图找寻实现应用程序创意的最佳方法,同时,更多的谜题将会在调试最初所写代码时出现。当把应用程序本身看做游戏时,我们可以在多个层面享受到整个开发过程的乐趣。快过来一起玩这个软件开发的游戏吧,它会实现一直在你脑海中盘旋的创意!
1.1 手机游戏市场
在今天的智能手机市场里,游戏可谓是杀手级应用。根据一份数据,在所有年满13岁的美国手机用户中,超过23%的人在手机上玩游戏—而且这个比例还在增加,尤其是对于超过6000万的智能手机用户来说。根据另一份数据,65%的智能手机用户曾经在手机上玩过至少一款手机游戏。计算一下可知,这意味着现在大约有4000万人在智能手机上玩游戏。
制作手机游戏可以是非常盈利的。尽管很难预料哪种游戏会一炮走红,然而快速浏览一下Android Market就会发现,成千上万的用户都曾下载了某种类型的游戏。就算每次下载只获利数美元,累计起来也相当可观。人们玩某款游戏一段时间之后,就大多会厌倦,很有可能再去下载新的游戏。
作为众多游戏迷中的一员,笔者将游戏看做最钟爱的手机应用之一。不管是在等人的时候打发时间,还是在公交车上,或者就是想放松几分钟,我都会在手机上玩会儿游戏,这是一件非常愉快的事情。
我认为每款游戏都应该有趣,但这并不意味着游戏不能同时具有教学功能。游戏经常用做教学或广告的手段—为什么不呢?如果学生或者潜在的顾客能够开心地玩一款带给他们益处的游戏,那会是件好事情。
1.2 电脑游戏的世界
差不多从有了计算机开始,人们就在上面玩游戏了,而且各式各样游戏都已制作出来。在Jane McGonigal的书《Reality Is Broken》中,作者说,大部分游戏都有以下四个属性。
目标:游戏清晰地定义了玩家需要达成的目标。重要的是,目标虽具有挑战性,却是可以达成的。理想情况下,玩家总是能充分发挥出他们的能力。目标让玩家在玩游戏时有一种使命感。
规则:游戏具有所有玩家必须遵守的规则。规则经常使得目标的达成变得困难,从而鼓励玩家产生创造性的玩法。
反馈:游戏必须告诉玩家他们玩得怎么样。实际上,有趣且有创意的反馈系统是让游戏有趣的关键。
自愿参与:除非真的愿意去玩,否则它就不算是个游戏。游戏的这个特性意味着玩家要接受游戏所定的目标、规则与反馈系统。
在制作游戏之前,需要思考存在哪些类型的游戏,也要思考哪些类型适合在手机上玩,哪些不适合,还要看看所有电脑游戏的共同要素。
……
译者序
序
前言
第1章 手机游戏
1.1 手机游戏市场
1.2 电脑游戏的世界
1.2.1 游戏类型
1.2.2 适合于手机的游戏
1.2.3 典型的游戏组件
1.2.4 《少女大战吸血鬼》
1.2.5 V3的设计
1.3 AndEngine范例
1.4 总结
1.5 习题
第2章 游戏要素与工具
2.1 软件开发工具
2.1.1 Android SDK
2.1.2 AndEngine游戏引擎库
2.1.3 AndEngine游戏概念
2.1.4 Box2D物理引擎
2.2 图形工具
2.2.1 矢量图工具:Inkscape
2.2.2 位图工具:GIMP
2.2.3 动画捕捉:AnimGet
2.2.4 瓦片地图创建工具:Tiled
2.2.5 TrueType字体创建与编辑工具:FontStruct
2.3 声音工具
2.3.1 音效工具:Audacity
2.3.2 背景音乐工具:MuseScore
2.4 初试身手:制作启动画面
2.4.1 创建游戏项目
2.4.2 加入AndEngine库
2.4.3 加入启动画面代码
2.4.4 用模拟器运行游戏
2.4.5 用Android设备运行游戏
2.5 总结
2.6 习题
第3章 游戏循环与菜单
3.1 游戏循环概述
3.2 AndEngine的游戏循环
3.2.1 初始化Engine对象
3.2.2 其他Engine类
3.3 为V3增加菜单屏幕
3.3.1 AndEngine的菜单
3.3.2 构建V3的开始菜单
3.3.3 创建菜单
3.3.4 MainMenuActivity类
3.3.5 常数与字段
3.3.6 onLoadResources()方法
3.3.7 onLoadScene()方法
3.3.8 createStaticMenuScene()方法与createPopUpScene()方法
3.3.9 onKeyDown()方法与onMenuItemClicked()方法
3.3.10 从启动画面切换到菜单
3.4 内存使用
3.5 “退出”选项
3.6 总结
3.7 习题
第4章 场景、图层、场景切换与实体修改器
4.1 AndEngine的场景
4.1.1 实体/组件模型
4.1.2 Entity类
4.1.3 构造器
4.1.4 Entity类的位置相关方法
4.1.5 Entity类的缩放相关方法
4.1.6 Entity类的颜色相关方法
4.1.7 Entity类的旋转相关方法
4.1.8 管理子对象
4.1.9 管理Modifier
4.1.10 其他有用的Entity类方法
4.1.11 Layer类
4.1.12 Scene类
4.1.13 背景管理
4.1.14 子Scene对象管理
4.1.15 Layer对象管理
4.1.16 上级Scene对象管理
4.1.17 触摸区域管理
4.1.18 特殊Scene类
4.1.19 用于Entity的Modifier类
4.1.20 EntityModifier类的通用方法
4.1.21 位置相关的EntityModifier类
4.1.22 缩放相关的EntityModifier类
4.1.23 颜色相关的EntityModifier类
4.1.24 旋转相关的EntityModifier类
4.1.25 透明度相关的EntityModifier类
4.1.26 延迟相关的EntityModifier类
4.1.27 Modifier的组合
4.1.28 EaseFunction
4.2 创建游戏第1关的场景
4.3 总结
4.4 习题
第5章 绘制与精灵
5.1 快速回顾Entity类
5.2 绘制线条与矩形
5.2.1 线条
5.2.2 矩形
5.3 精灵
5.3.1 贴图
5.3.2 效率问题
5.3.3 复合精灵
5.4 总结
5.5 习题
第6章 动画
6.1 动画所需素材
6.2 动画的瓦片贴图
6.3 AndEngine的动画
6.4 动画范例
6.5 将动画加入Level1Activity类
6.6 动画制作的问题
6.7 高级话题:从3D模型中制作2D动画
6.8 总结
6.9 习题
第7章 文本
7.1 字型与字体
7.2 载入字型
7.2.1 Font类
7.2.2 StrokeFont类
7.2.3 FontFactory类
7.2.4 FontManager类
7.2.5 Typeface类
7.3 AndEngine中的文本
7.3.1 AndEngine中的文本API
7.3.2 桌面通知
7.4 定制字型
7.5 将定制字型加入V3
7.6 总结
7.7 习题
第8章 用户输入
8.1 Android与AndEngine的输入方式
8.1.1 字母键盘与袖珍键盘
8.1.2 触摸
8.1.3 自定义手势
8.1.4 屏幕游戏手柄
8.1.5 加速计
8.1.6 位置和方向
8.1.7 语音
8.2 将用户输入加入V3
8.3 总结
8.4 习题
第9章 瓦片地图
9.1 为何使用瓦片地图
9.2 瓦片地图的类型
9.2.1 正交瓦片地图
9.2.2 等距投影瓦片地图
9.3 瓦片地图的结构
9.4 AndEngine中的瓦片地图
9.4.1 TMX与TSX文件
9.4.2 TMXLoader类
9.4.3 TMXTiledMap类
9.4.4 TMXLayer类
9.4.5 TMXTile类
9.5 瓦片编辑器:Tiled
9.6 TMX文件
9.7 正交瓦片地图游戏:《打吸血鬼》
9.7.1 WAV的瓦片地图
9.7.2 创建WAV的瓦片集
9.7.3 创建WAV的瓦片地图
9.7.4 《打吸血鬼》游戏的代码
9.8 等距投影瓦片地图
9.9 总结
9.10 习题
第10章 粒子系统
10.1 粒子发射器是什么
10.2 粒子系统如何运作
10.3 AndEngine的粒子系统
10.3.1 ParticleSystem类
10.3.2 ParticleEmitter类
10.3.3 ParticleInitializer类
10.3.4 ParticleModifier类
10.3.5 有用的ParticleSystem类方法
10.4 创建粒子系统
10.4.1 以传统方式创建粒子系统
10.4.2 以XML文件创建粒子系统
10.5 将粒子发射器加入V3游戏中
10.5.1 以传统方式制作V3的爆炸效果
10.5.2 以XML文件方式制作V3的爆炸效果
10.6 总结
10.7 习题
第11章 声音
11.1 如何在游戏中使用声音
11.1.1 音乐
11.1.2 音效
11.2 音乐与音效的来源
11.3 音乐与音效制作工具
11.4 音频解码器
11.5 使用AndEngine播放声音
11.5.1 Music类
11.5.2 Sound类
11.5.3 MusicFactory类
11.5.4 SoundFactory类
11.6 将声音加入V3游戏
11.6.1 创建音效
11.6.2 创建背景音乐
11.6.3 修改V3游戏的代码
11.7 总结
11.8 习题
第12章 物理效果
12.1 Box2D物理引擎
12.1.1 Box2D概念
12.1.2 设定Box2D
12.2 构建物理学游戏的关卡
12.3 AndEngine与Box2D
12.3.1 下载AndEnginePhysicsBox2DExtension并将其加入游戏项目
12.3.2 Box2D的API
12.3.3 简单的物理效果范例
12.3.4 关卡加载
12.4 《愤怒的村民》:V3中的物理学小游戏
12.5 实现IV游戏
12.5.1 创建关卡
12.5.2 编写IVActivity.java
12.6 总结
12.7 习题
第13章 人工智能
13.1 游戏AI相关话题
13.1.1 简单的脚本
13.1.2 决策树、Minimax树与状态机
13.1.3 专家系统或基于规则的决策系统
13.1.4 神经网络
13.1.5 遗传算法
13.1.6 路径查找
13.1.7 动态困难度调节
13.1.8 程序化的音乐生成
13.2 实现V3游戏的AI
13.3 总结
13.4 习题
第14章 计分与碰撞
14.1 计分系统设计
14.1.1 更新小游戏取得的分数
14.1.2 记录5个最高分
14.1.3 在小游戏场景中显示分数
14.1.4 分数页面的显示
14.2 AndEngine的碰撞
14.2.1 AndEngine的Shape碰撞
14.2.2 Box2D的碰撞
14.3 开始计算玩家的得分
14.4 《墓地》(第1关)场景
14.4.1 常量和字段
14.4.2 onLoadEngine方法与onLoadResources方法
14.4.3 onLoadScene方法
14.4.4 mStartVamp任务
14.5 《打吸血鬼》
14.5.1 常量和字段
14.5.2 onLoadScene方法
14.5.3 openCoffin和closeCoffin方法
14.6 《愤怒的村民》
14.6.1 常量和字段
14.6.2 onLoadScene方法
14.6.3 onLoadComplete方法
14.6.4 addStake方法
14.7 总结
14.8 习题
第15章 多媒体扩展包
15.1 下载多媒体扩展包
15.2 动态壁纸
15.2.1 Android动态壁纸
15.2.2 创建V3的Android动态壁纸
15.3 MOD格式音乐
15.3.1 搜寻MOD格式的音乐
15.3.2 XMP MOD播放器
15.4 多人游戏
15.5 AndEngine的多点触摸
15.6 增强现实游戏
15.7 总结
15.8 习题
第16章 游戏集成
16.1 困难度调节
16.1.1 困难度参数的保存
16.1.2 困难度参数的设定
16.2 游戏结束画面的代码
16.3 第1关:主游戏
16.4 《打吸血鬼》
16.5 《愤怒的村民》
16.6 选项菜单
16.7 总结
16.8 习题
第17章 测试与发行
17.1 应用程序商业模式
17.2 测试与发行准备工作
17.2.1 在实际设备上测试游戏
17.2.2 考虑加入终端用户许可协议
17.2.3 向Manifest文件加入图标与标签
17.2.4 关闭记录与调试功能
17.2.5 在游戏中增加版本号
17.2.6 获取密钥
17.2.7 编译与签名最终的.apk文件
17.2.8 测试最终的.apk文件
17.3 发行游戏
17.3.1 Android Market
17.3.2 Amazon App Store
17.4 推广游戏
17.4.1 App Store推广
17.4.2 游戏评论网站推广
17.4.3 手机广告
17.4.4 口碑营销
17.4.5 社交网络推广
17.5 总结
附录 习题解答
——Nicolas Gramlich,AndEngine创始人