书籍详情
Cocos2d-x游戏开发之旅
作者:钟迪龙
出版社:电子工业出版社
出版时间:2013-08-01
ISBN:9787121211362
定价:¥69.00
购买这本书可以去
内容简介
《Cocos2d-x游戏开发之旅》主要讲解了Cocos2d-x游戏图形引擎的使用方法,对常用的API使用方式以及重要的函数进行了深入的分析,并通过详细的游戏实例来介绍Cocos2d-x在实际开发中的应用,书中还大量穿插了在实际的手机游戏开发过程中遇到的问题以及解决方案。
作者简介
暂缺《Cocos2d-x游戏开发之旅》作者简介
目录
第1章 开学典礼 / 1
1.1 出场人物介绍 / 1
1.2 入学要求——本书适合人群 / 2
1.3 这内容有点糟糕——本书风格 / 2
1.4 你需要这些技能——学Cocos2d-x需要什么知识 / 3
1.5 我们为什么要学Cocos2d-x / 4
1.6 先给我们的代码找个温馨的家——环境搭建 / 4
1.6.1 紫色风暴之VS2010 / 4
1.6.2 我的Cocos2d-x版本 / 5
1.6.3 看看前辈们的毕业设计——运行官方Demo / 6
1.7 广告时间——提供一些学习资源 / 8
第2章 不离不弃的HelloWorld / 10
2.1 简单到无法想象——直接运行HelloCpp项目 / 10
2.2 新建Cocos2d-x项目遇到的麻烦——成功新建一个HelloWorld / 12
2.2.1 创建Cocos2d-x项目 / 12
2.2.2 解决编译报错的方案1——直接复制源文件 / 14
2.2.3 解决编译报错的方案2——修改项目配置 / 17
2.3 HelloWorld,没有想象中的简单——简单解析HelloWorld / 19
2.3.1 HelloWorld是如何显示到窗口的 / 19
2.3.2 场景其实不是真正的场景 / 20
2.4 实例来了 / 23
第3章 我们来学习怎么爬行 / 29
3.1 环游世界——场景 / 29
3.2 一切的主宰——导演 / 30
3.2.1 加载第一个场景 / 30
3.2.2 简单的切换场景 / 30
3.2.3 包含特效的切换场景 / 32
3.2.4 赠送的——推进和弹出场景 / 34
3.3 你走你的,我走我的——层 / 36
3.4 比对象还要可爱的对象——精灵来了 / 37
3.5 我得下命令——菜单 / 38
3.6 当个背包客——节点 / 40
第4章 我们来学习怎么走路 / 43
4.1 吉他独奏《天空之城》——播放声音 / 43
4.2 控件篇1——我最爱的九妹和按钮事件 / 44
4.2.1 你好,九妹——可拉伸图片 / 44
4.2.2 解决使用extensions库时编译报错的问题 / 46
4.2.3 九妹和按钮搭配 / 48
4.2.4 丰富多彩的按钮事件 / 49
4.2.5 啰嗦一下——CCControlButton特别的小功能 / 51
4.3 控件篇2——我不是DJ之圆形音量按钮 / 51
4.3.1 圆形音量按钮 / 51
4.4 控件篇3——我要战斗之血量条 / 54
4.4.1 又是一个音量控制按钮 / 54
4.4.2 我要的血量条 / 55
4.5 动作篇1——简简单单的运动 / 56
4.5.1 你想去哪,你想走多远——CCMoveTo和CCMoveBy / 56
4.5.2 我要减肥——CCScaleTo和CCScaleBy / 58
4.5.3 卡牌翻转特效——用CCScaleTo就可以实现 / 61
4.5.4 闪亮登场——CCBlink / 62
4.6 动作讲解2——更复杂的运动 / 63
4.6.1 我要你按照我的路线走——CCBezierTo和CCBezierBy / 63
4.6.2 我没让你停,重复动作——CCRepeatForever / 66
4.6.3 动作一起做,一边走一边转一边跳——CCSequence / 67
4.7 动作讲解3——动作监听 / 69
4.7.1 小若,到家了告诉我一声——动作结束监听 / 69
4.7.2 动作家族族谱 / 70
4.8 屏幕触摸事件 / 72
4.8.1 屏幕事件初探 / 72
4.8.2 复数形式的函数——每个CCLayer都能获取屏幕事件 / 75
4.8.3 单数形式的函数——截断事件,一个CCLayer的垄断 / 77
第5章 是时候跑起来了——《LittleRunner》 / 80
5.1 这是一个什么游戏 / 80
5.2 找个主角回来——创建主角精灵 / 81
5.2.1 创建筛选器 / 81
5.2.2 创建实体基类 / 82
5.2.3 创建主角类 / 83
5.2.4 创建游戏场景 / 84
5.2.5 修改游戏窗口大小 / 87
5.3 其实她不想跑——创建无限滚动地图 / 87
5.3.1 每一帧都可以操作——scheduleUpdate初探 / 87
5.3.2 翻滚吧,地图——地图无限滚动 / 89
5.4 开心的时候——让主角跳起来 / 91
5.4.1 CCControlButton的应用——创建跳跃按钮 / 91
5.4.2 CCJumpBy的应用——给主角添加跳跃动作 / 93
5.5 金钱诱惑——加入怪物 / 95
5.5.1 怪物诞生 / 95
5.5.2 怪物巢穴——创建怪物管理器 / 97
5.5.3 贪婪的主角——怪物碰撞检测 / 99
5.5.4 疼了就退后——增加主角受伤时的动作 / 103
5.6 监控一切——创建分数标签、血量条等属性对象 / 105
第6章 精灵来了第二季 / 109
6.1 一大波精灵来袭——大量精灵单独绘制的缺陷 / 109
6.2 把相同的精灵装上车——使用CCSpriteBatchNode优化绘制 / 110
6.2.1 一次渲染——CCSpriteBatchNode的特别之处 / 110
6.2.2 什么是纹理——CCTexture简单解说 / 112
6.3 遇到不同的精灵怎么办——TexturePacker工具使用 / 114
6.3.1 同一张图片,同一个纹理 / 114
6.3.2 将多张图片打包到一起 / 115
6.3.3 加载打包后的图片 / 117
6.4 是动画,不是动作——CCAnimation / 118
6.4.1 用打包前的图片创建动画 / 118
6.4.2 用打包后的图片创建动画 / 121
6.4.3 额外赠送——动画创建辅助类 / 123
第7章 游戏实例之《跑跑跑》 / 127
7.1 更丰富的世界——使用Tiled地图 / 127
7.1.1 世界诞生——创建跑步场景 / 127
7.1.2 Tiled地图来了——使用Tiled Map Editor创建地图文件 / 129
7.1.3 你报错了吗——Tiled Editor常见路径错误 / 130
7.2 嘿,培养新人——创建新的主角 / 131
7.2.1 主角诞生——创建实体类和主角类 / 131
7.2.2 固定主角出生点——对象层的使用 / 134
7.2.3 让主角跑——添加主角动画 / 136
7.3 更智能的主角——添加角色控制器 / 137
7.3.1 创建控制器基类 / 137
7.3.2 带着它就能跑——主角移动控制器 / 138
7.3.3 焦点是主角——让地图随着主角滚动 / 141
7.4 更多的内容 / 144
7.4.1 让主角上下移动——三方移动控制器 / 144
7.4.2 添加障碍物——Tiled障碍层的使用 / 148
7.4.3 添加能吃的物品以及胜利条件 / 153
第8章 用多线程做定时器?你疯了——schedule很强大 / 158
8.1 我爱单线程——schedule介绍 / 158
8.2 每一帧都有我——scheduleUpdate和update / 158
8.3 定时器可以这么做——schedule和回调函数 / 160
8.3.1 不调用update函数,调用自己的函数 / 160
8.3.2 真正的定时器 / 162
8.4 让一切都停下来——unSchedule / 162
8.5 触发器可以这么做——scheduleOnce和回调函数 / 164
8.6 额外赠送,我总是很关注我暗恋的女孩——观察者模式 / 165
8.6.1 你喜欢谁?我帮你留意——观察者模式扫盲 / 165
8.6.2 Cocos2d-x提供的观察者模式工具类——CCNotificationCenter / 166
8.6.3 addObserver和postNotification函数传递数据的区别 / 170
8.6.4 额外赠送——自己实现简单的观察者 / 172
第9章 野外生存训练 / 177
9.1 师父走了,你怎么办——学会查看官方Demo / 177
9.2 迟早都要学会——学习查看Demo源代码 / 178
9.3 别忘了开源——学习查看Cocos2d-x源代码 / 179
9.3.1 为什么addObserver和postNotification不能同时传递数据 / 179
9.4 物竞天择,没用的就要被淘汰——retain和release / 183
9.4.1 为什么会有retain / 183
9.4.2 真正的凶手autoRelease / 183
9.4.3 看代码实际点 / 183
9.4.4 原理来了 / 186
9.4.5 实际情况 / 187
9.4.6 倒底什么时候要retain / 187
9.5 再传授几招 / 188
9.5.1 在调试项目时,跟踪并进入Cocos2d-x的源码 / 188
9.5.2 什么?你忘了保存记忆?我们一起十年了啊——保存数据 / 189
9.6 我能摆脱编译的噩梦——读取Csv配置文件 / 191
9.6.1 什么是Csv文件——Csv格式文件扫盲 / 191
9.6.2 如何创建一个Csv文件 / 192
9.6.3 预热——编写字符串工具类 / 193
9.6.4 辅助工具——编写文本读取工具类 / 196
9.6.5 进入主题——编写Csv文件读取工具类 / 197
第10章 睡觉的时候不要吃东西——有限状态机 / 205
10.1 花5分钟告诉你什么是有限状态机 / 205
10.1.1 简单认识 / 205
10.1.2 一个很“好玩”的游戏 / 205
10.1.3 实现简单有限状态机的类 / 206
10.2 状态模式之我很胖但我很强 / 209
10.2.1 什么是状态模式 / 209
10.2.2 用状态模式实现有限状态机 / 211
10.3 真正的状态机来了 / 216
10.3.1 创建状态机类 / 216
10.3.2 被释放的木头类 / 218
10.4 事件驱动,你想象不到的强大 / 221
10.4.1 彻底抛弃update函数——新的状态机类 / 221
10.4.2 更智能的状态类 / 224
10.4.3 见证新的运作情况 / 225
第11章 我比Csv更厉害——强大的Lua / 228
11.1 让Lua和C++牵手 / 228
11.1.1 Lua的堆栈和全局表 / 228
11.1.2 Lua和C++的第一次通信 / 228
11.2 Demo讲解之Lua和C++牵手 / 229
11.2.1 引入头文件 / 230
11.2.2 开始使用 / 231
11.2.3 执行Lua脚本 / 232
11.2.4 重置栈顶索引,将全局变量放到堆栈中 / 233
11.2.5 最后一步,C++取得字符串 / 233
11.3 简单解析Lua的堆栈 / 234
11.4 来点高难度的,获取Lua表结构的数据 / 235
11.4.1 什么是table / 235
11.4.2 获取table变量 / 236
11.4.3 lua_gettable函数 / 236
11.5 C++调用Lua函数 / 239
11.6 Lua调用C++的函数 / 240
第12章 额外奉献,状态机代码生成工具——SMC / 244
12.1 加快状态机开发速度——SMC是什么 / 244
12.2 永远都从HelloWorld开始 / 245
12.2.1 这是令牌——sm配置文件 / 245
12.2.2 化令牌为力量——使用Smc.jar将配置文件转换为代码 / 246
12.2.3 一劳永逸——更方便的代码转换方式 / 247
12.2.4 整装待发——导入所需文件到项目中 / 247
12.2.5 最后的最后——编写主体类 / 248
12.2.6 简单解析原理 / 249
12.3 实例之SMC版木头写代码 / 252
12.3.1 木头的逻辑 / 252
12.3.2 编写剧本——sm配置文件 / 253
12.3.3 主角诞生——编写Mutou主体类 / 255
12.3.4 导演开拍——编写触发状态切换的功能 / 259
第13章 自力更生——自己写一个UI模块 / 264
13.1 刚开始必须要轻松一下——UI模块思路简介 / 264
13.1.1 它能为我们做些什么——UI模块包含的功能 / 264
13.1.2 一览众山小——UI模块设计思路图 / 265
13.2 XML文件和属性模块 / 266
13.2.1 一切的源头——UI的XML配置文件 / 266
13.2.2 知识补充1——TinyXML介绍 / 268
13.2.3 知识补充2——TinyXML的HelloWorld / 268
13.2.4 知识补充3——用TinyXML读取UI模块的XML配置文件 / 272
13.2.5 封装,我们要记住封装——XML标签节点对象 / 276
13.2.6 我负责保存,你负责修饰——XML标签节点属性设置器 / 283
13.3 尝点甜头——创建控件 / 286
13.4 主角来了——组件 / 288
13.4.1 控件基类——MMBase / 289
13.4.2 普通窗口控件——MMNormalWin / 290
13.4.3 标签控件——MMLabel / 291
13.4.4 甜点来了——测试新的控件类 / 293
13.5 控件管理模块 / 296
13.5.1 我是老大——MMWinManager控件管理器 / 296
13.5.2 我是先锋——MMWinSystem控件系统 / 300
13.5.3 我是前台——MMWinDesktop控件顶层桌面 / 304
13.6 控件工厂 / 305
13.6.1 抽象工厂之MMWinBaseFactory / 305
13.6.2 控件工厂之MMWinFactory / 306
13.6.3 装饰工厂之MMWinProperityFactory / 307
13.6.4 最后的事情——运行项目 / 310
13.7 更完整的UI模块 / 311
第14章 倾情奉献——因为偷懒而诞生的《卡牌塔防》游戏(上篇) / 313
14.1 开篇——最后的游戏实例 / 313
14.1.1 为什么是塔防游戏 / 313
14.1.2 《卡牌塔防》功能简介——我们能学到哪些知识 / 313
14.2 启程——关卡编辑器 / 315
14.2.1 一个英雄一个坑——炮台坐标编辑器 / 315
14.2.2 按照我给的路径走——怪物坐标编辑器 / 335
14.2.3 添加更多方便的操作 / 343
14.3 磨刀不误砍柴工——预备知识 / 350
14.3.1 导演的助手——场景管理器 / 350
14.3.2 数据读取模块 / 353
14.3.3 全局参数 / 354
14.3.4 请说英文好吗?不,说中文——I18N工具类 / 356
14.3.5 导入UI模块和TinyXml模块 / 360
第15章 倾情奉献——因为偷懒而诞生的《卡牌塔防》游戏(下篇) / 363
15.1 英雄诞生 / 363
15.1.1 创建关卡场景 / 363
15.1.2 地图层 / 364
15.1.3 实体基类 / 367
15.1.4 英雄管理器1——炮台对象 / 370
15.1.5 英雄管理器2——英雄对象 / 375
15.1.6 英雄管理器3——炮台和英雄的关系 / 379
15.1.7 英雄管理器4——加入创建英雄的功能 / 380
15.2 怪物来袭 / 382
15.2.1 怪物管理器 / 382
15.2.2 移动控制器1——控制器基类 / 388
15.2.3 移动控制器2——移动控制器基类 / 389
15.2.4 移动控制器3——按指定坐标列表移动 / 391
15.2.5 怪物来了 / 395
15.3 英雄进攻 / 399
15.3.1 英雄的一次攻击流程 / 399
15.3.2 在Hero里获取怪物列表 / 400
15.3.3 查找并锁定攻击目标 / 403
15.3.4 英雄的攻击 / 404
15.3.5 子弹管理器1——子弹类 / 407
15.3.6 子弹管理器2——子弹管理器 / 410
15.3.7 子弹管理器3——英雄开始发射子弹 / 414
15.4 华丽的装饰 / 415
15.4.1 怪物血量条 / 415
15.4.2 炮台操作按钮——英雄华丽升级 / 419
15.4.3 怪物起点和终点魔法台 / 423
第16章 倾情奉献——因为偷懒而诞生的《卡牌塔防》游戏(终结篇) / 427
16.1 关卡信息UI / 427
16.1.1 利用自定义UI模块制作关卡信息面板 / 427
16.1.2 关卡信息数据刷新——CCNotificationCenter的应用 / 432
16.1.3 怪物数量刷新 / 437
16.1.4 怪物安息——怪物死亡后塔魂数量刷新 / 438
16.1.5 堡垒安息——怪物到达堡垒后扣除魔力值 / 439
16.1.6 打怪升级——英雄升级扣除塔魂 / 443
16.2 谢幕 / 444
16.2.1 关卡选择——根据关卡数加载游戏 / 445
16.2.2 胜利条件判断 / 448
16.2.3 失败条件判断 / 452
16.3 移植游戏到Android平台 / 452
16.3.1 傻瓜式的Android环境搭建1——准备工作 / 453
16.3.2 傻瓜式的Android环境搭建2——解压和安装 / 454
16.3.3 傻瓜式的Android环境搭建3——测试一下吧 / 457
16.3.4 不需要Cygwin——生成并导入Android项目 / 458
16.3.5 怎么编译C++文件——创建Builder / 459
16.3.6 开始编译——Android.mk文件 / 464
第17章 额外的一些东西 / 468
17.1 常见错误及解决方案 / 468
17.1.1 调用可变参数函数时,总是莫名报错 / 468
17.1.2 无法解析的外部符号(或命令) / 468
17.1.3 Android移植编译报错——undefined reference to / 469
17.1.4 使用了TinyXML后,移植到Android中运行报错 / 469
17.1.5 CCLabelTTF变成了一个黑块——多线程引起的Bug / 470
17.2 最后的内容 / 470
17.2.1 不管游戏多快,一帧就是一帧,我们能做很多事情 / 470
17.2.2 给读者的惊喜——丁小若寄语 / 471
17.2.3 请提供你的意见以及你发现的Bug / 471
1.1 出场人物介绍 / 1
1.2 入学要求——本书适合人群 / 2
1.3 这内容有点糟糕——本书风格 / 2
1.4 你需要这些技能——学Cocos2d-x需要什么知识 / 3
1.5 我们为什么要学Cocos2d-x / 4
1.6 先给我们的代码找个温馨的家——环境搭建 / 4
1.6.1 紫色风暴之VS2010 / 4
1.6.2 我的Cocos2d-x版本 / 5
1.6.3 看看前辈们的毕业设计——运行官方Demo / 6
1.7 广告时间——提供一些学习资源 / 8
第2章 不离不弃的HelloWorld / 10
2.1 简单到无法想象——直接运行HelloCpp项目 / 10
2.2 新建Cocos2d-x项目遇到的麻烦——成功新建一个HelloWorld / 12
2.2.1 创建Cocos2d-x项目 / 12
2.2.2 解决编译报错的方案1——直接复制源文件 / 14
2.2.3 解决编译报错的方案2——修改项目配置 / 17
2.3 HelloWorld,没有想象中的简单——简单解析HelloWorld / 19
2.3.1 HelloWorld是如何显示到窗口的 / 19
2.3.2 场景其实不是真正的场景 / 20
2.4 实例来了 / 23
第3章 我们来学习怎么爬行 / 29
3.1 环游世界——场景 / 29
3.2 一切的主宰——导演 / 30
3.2.1 加载第一个场景 / 30
3.2.2 简单的切换场景 / 30
3.2.3 包含特效的切换场景 / 32
3.2.4 赠送的——推进和弹出场景 / 34
3.3 你走你的,我走我的——层 / 36
3.4 比对象还要可爱的对象——精灵来了 / 37
3.5 我得下命令——菜单 / 38
3.6 当个背包客——节点 / 40
第4章 我们来学习怎么走路 / 43
4.1 吉他独奏《天空之城》——播放声音 / 43
4.2 控件篇1——我最爱的九妹和按钮事件 / 44
4.2.1 你好,九妹——可拉伸图片 / 44
4.2.2 解决使用extensions库时编译报错的问题 / 46
4.2.3 九妹和按钮搭配 / 48
4.2.4 丰富多彩的按钮事件 / 49
4.2.5 啰嗦一下——CCControlButton特别的小功能 / 51
4.3 控件篇2——我不是DJ之圆形音量按钮 / 51
4.3.1 圆形音量按钮 / 51
4.4 控件篇3——我要战斗之血量条 / 54
4.4.1 又是一个音量控制按钮 / 54
4.4.2 我要的血量条 / 55
4.5 动作篇1——简简单单的运动 / 56
4.5.1 你想去哪,你想走多远——CCMoveTo和CCMoveBy / 56
4.5.2 我要减肥——CCScaleTo和CCScaleBy / 58
4.5.3 卡牌翻转特效——用CCScaleTo就可以实现 / 61
4.5.4 闪亮登场——CCBlink / 62
4.6 动作讲解2——更复杂的运动 / 63
4.6.1 我要你按照我的路线走——CCBezierTo和CCBezierBy / 63
4.6.2 我没让你停,重复动作——CCRepeatForever / 66
4.6.3 动作一起做,一边走一边转一边跳——CCSequence / 67
4.7 动作讲解3——动作监听 / 69
4.7.1 小若,到家了告诉我一声——动作结束监听 / 69
4.7.2 动作家族族谱 / 70
4.8 屏幕触摸事件 / 72
4.8.1 屏幕事件初探 / 72
4.8.2 复数形式的函数——每个CCLayer都能获取屏幕事件 / 75
4.8.3 单数形式的函数——截断事件,一个CCLayer的垄断 / 77
第5章 是时候跑起来了——《LittleRunner》 / 80
5.1 这是一个什么游戏 / 80
5.2 找个主角回来——创建主角精灵 / 81
5.2.1 创建筛选器 / 81
5.2.2 创建实体基类 / 82
5.2.3 创建主角类 / 83
5.2.4 创建游戏场景 / 84
5.2.5 修改游戏窗口大小 / 87
5.3 其实她不想跑——创建无限滚动地图 / 87
5.3.1 每一帧都可以操作——scheduleUpdate初探 / 87
5.3.2 翻滚吧,地图——地图无限滚动 / 89
5.4 开心的时候——让主角跳起来 / 91
5.4.1 CCControlButton的应用——创建跳跃按钮 / 91
5.4.2 CCJumpBy的应用——给主角添加跳跃动作 / 93
5.5 金钱诱惑——加入怪物 / 95
5.5.1 怪物诞生 / 95
5.5.2 怪物巢穴——创建怪物管理器 / 97
5.5.3 贪婪的主角——怪物碰撞检测 / 99
5.5.4 疼了就退后——增加主角受伤时的动作 / 103
5.6 监控一切——创建分数标签、血量条等属性对象 / 105
第6章 精灵来了第二季 / 109
6.1 一大波精灵来袭——大量精灵单独绘制的缺陷 / 109
6.2 把相同的精灵装上车——使用CCSpriteBatchNode优化绘制 / 110
6.2.1 一次渲染——CCSpriteBatchNode的特别之处 / 110
6.2.2 什么是纹理——CCTexture简单解说 / 112
6.3 遇到不同的精灵怎么办——TexturePacker工具使用 / 114
6.3.1 同一张图片,同一个纹理 / 114
6.3.2 将多张图片打包到一起 / 115
6.3.3 加载打包后的图片 / 117
6.4 是动画,不是动作——CCAnimation / 118
6.4.1 用打包前的图片创建动画 / 118
6.4.2 用打包后的图片创建动画 / 121
6.4.3 额外赠送——动画创建辅助类 / 123
第7章 游戏实例之《跑跑跑》 / 127
7.1 更丰富的世界——使用Tiled地图 / 127
7.1.1 世界诞生——创建跑步场景 / 127
7.1.2 Tiled地图来了——使用Tiled Map Editor创建地图文件 / 129
7.1.3 你报错了吗——Tiled Editor常见路径错误 / 130
7.2 嘿,培养新人——创建新的主角 / 131
7.2.1 主角诞生——创建实体类和主角类 / 131
7.2.2 固定主角出生点——对象层的使用 / 134
7.2.3 让主角跑——添加主角动画 / 136
7.3 更智能的主角——添加角色控制器 / 137
7.3.1 创建控制器基类 / 137
7.3.2 带着它就能跑——主角移动控制器 / 138
7.3.3 焦点是主角——让地图随着主角滚动 / 141
7.4 更多的内容 / 144
7.4.1 让主角上下移动——三方移动控制器 / 144
7.4.2 添加障碍物——Tiled障碍层的使用 / 148
7.4.3 添加能吃的物品以及胜利条件 / 153
第8章 用多线程做定时器?你疯了——schedule很强大 / 158
8.1 我爱单线程——schedule介绍 / 158
8.2 每一帧都有我——scheduleUpdate和update / 158
8.3 定时器可以这么做——schedule和回调函数 / 160
8.3.1 不调用update函数,调用自己的函数 / 160
8.3.2 真正的定时器 / 162
8.4 让一切都停下来——unSchedule / 162
8.5 触发器可以这么做——scheduleOnce和回调函数 / 164
8.6 额外赠送,我总是很关注我暗恋的女孩——观察者模式 / 165
8.6.1 你喜欢谁?我帮你留意——观察者模式扫盲 / 165
8.6.2 Cocos2d-x提供的观察者模式工具类——CCNotificationCenter / 166
8.6.3 addObserver和postNotification函数传递数据的区别 / 170
8.6.4 额外赠送——自己实现简单的观察者 / 172
第9章 野外生存训练 / 177
9.1 师父走了,你怎么办——学会查看官方Demo / 177
9.2 迟早都要学会——学习查看Demo源代码 / 178
9.3 别忘了开源——学习查看Cocos2d-x源代码 / 179
9.3.1 为什么addObserver和postNotification不能同时传递数据 / 179
9.4 物竞天择,没用的就要被淘汰——retain和release / 183
9.4.1 为什么会有retain / 183
9.4.2 真正的凶手autoRelease / 183
9.4.3 看代码实际点 / 183
9.4.4 原理来了 / 186
9.4.5 实际情况 / 187
9.4.6 倒底什么时候要retain / 187
9.5 再传授几招 / 188
9.5.1 在调试项目时,跟踪并进入Cocos2d-x的源码 / 188
9.5.2 什么?你忘了保存记忆?我们一起十年了啊——保存数据 / 189
9.6 我能摆脱编译的噩梦——读取Csv配置文件 / 191
9.6.1 什么是Csv文件——Csv格式文件扫盲 / 191
9.6.2 如何创建一个Csv文件 / 192
9.6.3 预热——编写字符串工具类 / 193
9.6.4 辅助工具——编写文本读取工具类 / 196
9.6.5 进入主题——编写Csv文件读取工具类 / 197
第10章 睡觉的时候不要吃东西——有限状态机 / 205
10.1 花5分钟告诉你什么是有限状态机 / 205
10.1.1 简单认识 / 205
10.1.2 一个很“好玩”的游戏 / 205
10.1.3 实现简单有限状态机的类 / 206
10.2 状态模式之我很胖但我很强 / 209
10.2.1 什么是状态模式 / 209
10.2.2 用状态模式实现有限状态机 / 211
10.3 真正的状态机来了 / 216
10.3.1 创建状态机类 / 216
10.3.2 被释放的木头类 / 218
10.4 事件驱动,你想象不到的强大 / 221
10.4.1 彻底抛弃update函数——新的状态机类 / 221
10.4.2 更智能的状态类 / 224
10.4.3 见证新的运作情况 / 225
第11章 我比Csv更厉害——强大的Lua / 228
11.1 让Lua和C++牵手 / 228
11.1.1 Lua的堆栈和全局表 / 228
11.1.2 Lua和C++的第一次通信 / 228
11.2 Demo讲解之Lua和C++牵手 / 229
11.2.1 引入头文件 / 230
11.2.2 开始使用 / 231
11.2.3 执行Lua脚本 / 232
11.2.4 重置栈顶索引,将全局变量放到堆栈中 / 233
11.2.5 最后一步,C++取得字符串 / 233
11.3 简单解析Lua的堆栈 / 234
11.4 来点高难度的,获取Lua表结构的数据 / 235
11.4.1 什么是table / 235
11.4.2 获取table变量 / 236
11.4.3 lua_gettable函数 / 236
11.5 C++调用Lua函数 / 239
11.6 Lua调用C++的函数 / 240
第12章 额外奉献,状态机代码生成工具——SMC / 244
12.1 加快状态机开发速度——SMC是什么 / 244
12.2 永远都从HelloWorld开始 / 245
12.2.1 这是令牌——sm配置文件 / 245
12.2.2 化令牌为力量——使用Smc.jar将配置文件转换为代码 / 246
12.2.3 一劳永逸——更方便的代码转换方式 / 247
12.2.4 整装待发——导入所需文件到项目中 / 247
12.2.5 最后的最后——编写主体类 / 248
12.2.6 简单解析原理 / 249
12.3 实例之SMC版木头写代码 / 252
12.3.1 木头的逻辑 / 252
12.3.2 编写剧本——sm配置文件 / 253
12.3.3 主角诞生——编写Mutou主体类 / 255
12.3.4 导演开拍——编写触发状态切换的功能 / 259
第13章 自力更生——自己写一个UI模块 / 264
13.1 刚开始必须要轻松一下——UI模块思路简介 / 264
13.1.1 它能为我们做些什么——UI模块包含的功能 / 264
13.1.2 一览众山小——UI模块设计思路图 / 265
13.2 XML文件和属性模块 / 266
13.2.1 一切的源头——UI的XML配置文件 / 266
13.2.2 知识补充1——TinyXML介绍 / 268
13.2.3 知识补充2——TinyXML的HelloWorld / 268
13.2.4 知识补充3——用TinyXML读取UI模块的XML配置文件 / 272
13.2.5 封装,我们要记住封装——XML标签节点对象 / 276
13.2.6 我负责保存,你负责修饰——XML标签节点属性设置器 / 283
13.3 尝点甜头——创建控件 / 286
13.4 主角来了——组件 / 288
13.4.1 控件基类——MMBase / 289
13.4.2 普通窗口控件——MMNormalWin / 290
13.4.3 标签控件——MMLabel / 291
13.4.4 甜点来了——测试新的控件类 / 293
13.5 控件管理模块 / 296
13.5.1 我是老大——MMWinManager控件管理器 / 296
13.5.2 我是先锋——MMWinSystem控件系统 / 300
13.5.3 我是前台——MMWinDesktop控件顶层桌面 / 304
13.6 控件工厂 / 305
13.6.1 抽象工厂之MMWinBaseFactory / 305
13.6.2 控件工厂之MMWinFactory / 306
13.6.3 装饰工厂之MMWinProperityFactory / 307
13.6.4 最后的事情——运行项目 / 310
13.7 更完整的UI模块 / 311
第14章 倾情奉献——因为偷懒而诞生的《卡牌塔防》游戏(上篇) / 313
14.1 开篇——最后的游戏实例 / 313
14.1.1 为什么是塔防游戏 / 313
14.1.2 《卡牌塔防》功能简介——我们能学到哪些知识 / 313
14.2 启程——关卡编辑器 / 315
14.2.1 一个英雄一个坑——炮台坐标编辑器 / 315
14.2.2 按照我给的路径走——怪物坐标编辑器 / 335
14.2.3 添加更多方便的操作 / 343
14.3 磨刀不误砍柴工——预备知识 / 350
14.3.1 导演的助手——场景管理器 / 350
14.3.2 数据读取模块 / 353
14.3.3 全局参数 / 354
14.3.4 请说英文好吗?不,说中文——I18N工具类 / 356
14.3.5 导入UI模块和TinyXml模块 / 360
第15章 倾情奉献——因为偷懒而诞生的《卡牌塔防》游戏(下篇) / 363
15.1 英雄诞生 / 363
15.1.1 创建关卡场景 / 363
15.1.2 地图层 / 364
15.1.3 实体基类 / 367
15.1.4 英雄管理器1——炮台对象 / 370
15.1.5 英雄管理器2——英雄对象 / 375
15.1.6 英雄管理器3——炮台和英雄的关系 / 379
15.1.7 英雄管理器4——加入创建英雄的功能 / 380
15.2 怪物来袭 / 382
15.2.1 怪物管理器 / 382
15.2.2 移动控制器1——控制器基类 / 388
15.2.3 移动控制器2——移动控制器基类 / 389
15.2.4 移动控制器3——按指定坐标列表移动 / 391
15.2.5 怪物来了 / 395
15.3 英雄进攻 / 399
15.3.1 英雄的一次攻击流程 / 399
15.3.2 在Hero里获取怪物列表 / 400
15.3.3 查找并锁定攻击目标 / 403
15.3.4 英雄的攻击 / 404
15.3.5 子弹管理器1——子弹类 / 407
15.3.6 子弹管理器2——子弹管理器 / 410
15.3.7 子弹管理器3——英雄开始发射子弹 / 414
15.4 华丽的装饰 / 415
15.4.1 怪物血量条 / 415
15.4.2 炮台操作按钮——英雄华丽升级 / 419
15.4.3 怪物起点和终点魔法台 / 423
第16章 倾情奉献——因为偷懒而诞生的《卡牌塔防》游戏(终结篇) / 427
16.1 关卡信息UI / 427
16.1.1 利用自定义UI模块制作关卡信息面板 / 427
16.1.2 关卡信息数据刷新——CCNotificationCenter的应用 / 432
16.1.3 怪物数量刷新 / 437
16.1.4 怪物安息——怪物死亡后塔魂数量刷新 / 438
16.1.5 堡垒安息——怪物到达堡垒后扣除魔力值 / 439
16.1.6 打怪升级——英雄升级扣除塔魂 / 443
16.2 谢幕 / 444
16.2.1 关卡选择——根据关卡数加载游戏 / 445
16.2.2 胜利条件判断 / 448
16.2.3 失败条件判断 / 452
16.3 移植游戏到Android平台 / 452
16.3.1 傻瓜式的Android环境搭建1——准备工作 / 453
16.3.2 傻瓜式的Android环境搭建2——解压和安装 / 454
16.3.3 傻瓜式的Android环境搭建3——测试一下吧 / 457
16.3.4 不需要Cygwin——生成并导入Android项目 / 458
16.3.5 怎么编译C++文件——创建Builder / 459
16.3.6 开始编译——Android.mk文件 / 464
第17章 额外的一些东西 / 468
17.1 常见错误及解决方案 / 468
17.1.1 调用可变参数函数时,总是莫名报错 / 468
17.1.2 无法解析的外部符号(或命令) / 468
17.1.3 Android移植编译报错——undefined reference to / 469
17.1.4 使用了TinyXML后,移植到Android中运行报错 / 469
17.1.5 CCLabelTTF变成了一个黑块——多线程引起的Bug / 470
17.2 最后的内容 / 470
17.2.1 不管游戏多快,一帧就是一帧,我们能做很多事情 / 470
17.2.2 给读者的惊喜——丁小若寄语 / 471
17.2.3 请提供你的意见以及你发现的Bug / 471
猜您喜欢