作者:钟迪龙著 页数:488 出版社:北京市:电子工业出版社 出版日期:2013.08
有需要联系QQ:2506187523
目录 :
第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