第1章 开学典礼 / 1
1.1 出场人物介绍 / 1
1.2 入学要求——本书适合人群 / 2
1.3 这内容有点糟糕——本书风格 / 2
1.4 你需要这些技能——学cocos2d-x需要什么知识 / 3
1.5 我们为什么要学cocos2d-x 3.0 / 4
1.6 先给我们的代码找个温馨的家——环境搭建 / 4
1.6.1 黑色风暴之vs2013 / 4
1.6.2 我的cocos2d-x版本 / 5
1.6.3 我们还需要做一些准备工作 / 6
1.6.4 半自动配置环境变量 / 6
1.6.5 看看前辈们的毕业设计——运行官方demo / 8
1.7 广告时间——提供一些学习资源 / 10
第2章 不离不弃的helloworld / 12
2.1 简单到无法想象——直接运行helloworld项目 / 12
2.2 新建cocos2d-x项目遇到的麻烦——成功新建一个helloworld / 14
2.2.1 创建cocos2d-x 3.0项目 / 14
2.3 helloworld,没有想象中的简单——简单解析helloworld / 16
2.3.1 helloworld是如何显示到窗口的 / 16
2.3.2 场景其实不是真正的场景 / 17
2.4 实例来了 / 20
2.4.1 题外话——一个工程多个项目,避免重复编译 / 20
2.4.2 创建属于自己的helloworld / 23
第3章 我们来学习怎么爬行 / 28
3.1 环游世界——场景 / 28
3.2 一切的主宰——导演 / 29
3.2.1 加载第一个场景 / 29
3.2.2 简单的切换场景 / 29
3.2.3 包含特效的切换场景 / 31
3.2.4 赠送的——推进和弹出场景 / 33
3.3 你走你的,我走我的——层 / 35
3.4 比对象还要可爱的对象——精灵来了 / 36
3.5 我得下命令——菜单 / 37
3.6 当个背包客——节点 / 39
3.7 cocos2d-x 3.0新成员——value、vector、map / 40
3.7.1 有容乃大——value / 41
3.7.2 给我排好队——vector / 42
3.7.3 对号入座——map / 44
3.7.4 value的超能力——整数、浮点数、字符串之间的转换 / 46
第4章 我们来学习怎么走路 / 47
4.1 吉他独奏《天空之城》——播放声音 / 47
4.2 控件篇1——我最爱的九妹和按钮事件 / 48
4.2.1 你好,九妹——可拉伸图片 / 48
4.2.2 解决使用extensions库时编译报错的问题 / 49
4.2.3 九妹和按钮搭配 / 51
4.3 可视化的世界——cocostudio ui编辑器 / 53
本节实例源代码为:chapter4_2_scale9sprite / 53
4.3.1 还在用代码写ui?你傻了吧 / 53
4.3.2 只需要拖动——ui编辑器初探 / 54
4.3.3 更丰富的ui——导入图片资源 / 56
4.3.4 更丰富的ui——导出最终文件 / 58
4.3.5 展示成果——在游戏中加载ui / 59
4.3.6 我要互动——按钮监听事件 / 62
4.4 番外篇——cocostudio ui编辑器进阶功能 / 65
4.4.1 要死、要死、要死了之血量条 / 65
4.4.2 我要藏起来之滑动层 / 68
第5章 我们来学习怎么打架 / 72
5.1 动作讲解1——简简单单的运动 / 72
5.1.1 你想去哪,你想走多远——moveto和moveby / 72
5.1.2 我要减肥——scaleto和scaleby / 74
5.1.3 卡牌翻转特效——用scaleto就可以实现 / 77
5.1.4 闪亮登场——blink / 77
5.2 动作讲解2——更复杂的运动 / 79
5.2.1 我要你按照我的路线走——bezierto和bezierby / 79
5.2.2 我没让你停,重复动作——repeatforever / 81
5.2.3 动作一起做,一边走一边转一边跳——sequence与spawn / 82
5.3 动作讲解3——动作监听 / 84
5.3.1 小若,到家了告诉我一声——动作结束监听 / 84
5.3.2 更方便的函数回调——lambda / 85
5.3.3 动作家族族谱 / 88
5.4 屏幕触摸事件 / 89
5.4.1 屏幕事件初探 / 89
5.4.2 单点触摸——截断事件,一个对象的垄断 / 91
5.4.3 多点触摸——太弱了,一起上吧 / 94
第6章 是时候跑起来了——《littlerunner》/ 99
6.1 这是一个什么游戏 / 99
6.2 找个主角回来——创建主角精灵 / 100
6.2.1 创建筛选器 / 100
6.2.2 创建实体基类 / 101
6.2.3 创建主角类 / 102
6.2.4 创建游戏场景 / 103
6.2.5 修改游戏窗口大小 / 106
6.3 其实她不想跑——创建无限滚动地图 / 107
6.3.1 每一帧都可以操作——scheduleupdate初探 / 107
6.3.2 翻滚吧,地图——地图无限滚动 / 109
6.4 开心的时候——让主角跳起来 / 111
6.4.1 button的应用——创建跳跃按钮 / 111
6.4.2 jumpby的应用——给主角添加跳跃动作 / 112
6.5 金钱诱惑——加入怪物 / 114
6.5.1 怪物诞生 / 114
6.5.2 怪物巢穴——创建怪物管理器 / 116
6.5.3 贪婪的主角——怪物碰撞检测 / 119
6.5.4 怪物碰不到主角——使用组合的小麻烦 / 122
6.5.5 疼了就退后——增加主角受伤时的动作 / 123
6.6 监控一切——创建分数标签、血量条等属性对象 / 125
第7章 精灵来了第二季 / 129
7.1 一大波精灵来袭——大量精灵单独绘制的缺陷 / 129
7.1.1 2.0的回忆——大量绘制精灵的尴尬 / 129
7.1.2 3.0新功能——auto-batching / 130
7.1.3 没有完美的事物——auto-batching“驾驭手册” / 131
7.1.4 谁先上的问题——setglobalzorder、setlocalzorder、setorderofarrival / 134
7.1.5 附赠甜品——auto-batching源码级深入分析 / 138
7.2 把相同的精灵装上车——使用spritebatchnode优化绘制 / 144
7.2.1 一次渲染——spritebatchnode的特别之处 / 144
7.2.2 什么是纹理——texture简单解说 / 146
7.3 遇到不同的精灵怎么办——texturepacker工具使用 / 147
7.3.1 同一张图片,同一个纹理 / 148
7.3.2 将多张图片打包到一起 / 149
7.3.3 加载打包后的图片 / 151
7.4 是动画,不是动作——animation / 152
7.4.1 用打包前的图片创建动画 / 152
7.4.2 用打包后的图片创建动画 / 154
7.4.3 额外赠送——动画创建辅助类 / 156
第8章 游戏实例之《跑跑跑》 / 160
8.1 更丰富的世界——使用tiled地图 / 160
8.1.1 世界诞生——创建跑步场景 / 160
8.1.2 tiled地图来了——使用tiled map editor创建地图文件 / 162
8.1.3 你报错了吗——tiled editor常见路径错误 / 163
8.2 嘿,培养新人——创建新的主角 / 164
8.2.1 主角诞生——创建实体类和主角类 / 164
8.2.2 固定主角出生点——对象层的使用 / 167
8.2.3 让主角跑——添加主角动画 / 169
8.3 更智能的主角——添加角色控制器 / 170
8.3.1 创建控制器基类 / 170
8.3.2 带着它就能跑——主角移动控制器 / 172
8.3.3 焦点是主角——让地图随着主角滚动 / 175
8.4 更多的内容 / 178
8.4.1 让主角上下移动——三方移动控制器 / 178
8.4.2 添加障碍物——tiled障碍层的使用 / 181
8.4.3 添加能吃的物品以及胜利条件 / 187
第9章 用多线程做定时器?你疯了——schedule很强大 / 191
9.1 我爱单线程——schedule介绍 / 191
9.2 每一帧都有我——scheduleupdate和update / 191
9.3 定时器可以这么做——schedule和回调函数 / 193
9.3.1 不调用update函数,调用自己的函数 / 193
9.3.2 真正的定时器 / 194
9.4 让一切都停下来——unschedule / 195
9.5 触发器可以这么做——scheduleonce和回调函数 / 197
9.6 准确的计时功能——制作定时器 / 198
9.6.1 schedule并没有那么准时——越走越慢的时间 / 198
9.6.2 更准确地计时——不会变慢的时间 / 200
9.6.3 制作定时炸弹——方便的定时回调功能封装 / 203
9.7 额外赠送,我总是很关注我暗恋的女孩——观察者模式 / 205
9.7.1 你喜欢谁?我帮你留意——观察者模式扫盲 / 205
9.7.2 cocos2d-x提供的观察者模式工具类——notificationcenter / 206
9.7.3 addobserver和postnotification函数传递数据的区别 / 209
9.7.4 额外赠送——自己实现简单的观察者 / 211
第10章 野外生存训练 / 216
10.1 师父走了,你怎么办——学会查看官方demo / 216
10.2 迟早都要学会——学习查看demo源代码 / 217
10.3 别忘了开源——学习查看cocos2d-x源代码 / 218
10.3.1 为什么addobserver和postnotification不能同时传递数据 / 218
10.4 物竞天择,没用的就要被淘汰——retain和release / 221
10.4.1 为什么会有retain / 221
10.4.2 真正的凶手autorelease / 222
10.4.3 看代码实际点 / 222
10.4.4 原理来了 / 224
10.4.5 实际情况 / 225
10.4.6 到底什么时候要retain / 225
10.5 什么?你忘了保存记忆?我们一起十年了啊——保存数据 / 226
10.6 我能摆脱编译的噩梦——读取csv配置文件 / 227
10.6.1 什么是csv文件——csv格式文件扫盲 / 228
10.6.2 如何创建一个csv文件 / 228
10.6.3 预热——编写字符串工具类 / 229
10.6.4 一切都是对象——csv文件对象类 / 231
10.6.5 进入主题——编写csv文件读取工具类 / 233
10.7 再给编译噩梦粉碎一击——更方便扩展的json / 238
10.7.1 json又是什么——基础扫盲 / 238
10.7.2 拿好你的武器——导入jsoncpp解析库 / 239
10.7.3 就是这么简单——读取json文件 / 241
10.7.4 进阶挑战——读取嵌套结构的json文件 / 242
10.7.5 进阶挑战——读取数组结构的json文件 / 243
10.7.6 进阶挑战——输出json文件 / 244
第11章 睡觉的时候不要吃东西——有限状态机 / 247
11.1 花5分钟告诉你什么是有限状态机 / 247
11.1.1 简单认识 / 247
11.1.2 一个很“好玩”的游戏 / 247
11.1.3 实现简单有限状态机的类 / 248
11.2 状态模式之我很胖但我很强 / 251
11.2.1 什么是状态模式 / 251
11.2.2 用状态模式实现有限状态机 / 252
11.3 真正的状态机来了 / 258
11.3.1 创建状态机类 / 258
11.3.2 被释放的木头类 / 260
11.4 事件驱动,你想象不到的强大 / 263
11.4.1 彻底抛弃update函数——新的状态机类 / 263
11.4.2 更智能的状态类 / 266
11.4.3 见证新的运作情况 / 267
第12章 我比csv更厉害——强大的lua / 269
12.1 让lua和c++牵手 / 269
12.1.1 lua的堆栈和全局表 / 269
12.1.2 lua和c++的第一次通信 / 269
12.2 demo讲解之lua和c++牵手 / 270
12.2.1 引入lua库 / 271
12.2.2 开始使用 / 272
12.2.3 执行lua脚本 / 273
12.2.4 重置栈顶索引,将全局变量放到堆栈中 / 274
12.2.5 最后一步,c++取得字符串 / 274
12.3 简单解析lua的堆栈 / 276
12.4 来点高难度的,获取lua表结构的数据 / 276
12.4.1 什么是table / 277
12.4.2 获取table变量 / 277
12.4.3 lua_gettable函数 / 277
12.5 c++调用lua函数 / 280
12.6 lua调用c++的函数 / 281
第13章 自力更生——自己写一个ui模块 / 285
13.1 刚开始必须要轻松一下——ui模块思路简介 / 285
13.1.1 它能为我们做些什么——ui模块包含的功能 / 285
13.1.2 一览众山小——ui模块设计思路图 / 286
13.2 xml文件和属性模块 / 287
13.2.1 一切的源头——ui的xml配置文件 / 287
13.2.2 知识补充1——tinyxml介绍 / 289
13.2.3 知识补充2——tinyxml的helloworld / 289
13.2.4 知识补充3——用tinyxml读取ui模块的xml配置文件 / 292
13.2.5 封装,我们要记住封装——xml标签节点对象 / 296
13.2.6 我负责保存,你负责修饰——xml标签节点属性设置器 / 302
13.3 尝点甜头——创建控件 / 305
13.4 主角来了——组件 / 308
13.4.1 控件基类——mmbase / 308
13.4.2 普通窗口控件——mmnormalwin / 309
13.4.3 标签控件——mmlabel / 311
13.4.4 甜点来了——测试新的控件类 / 312
13.5 控件管理模块 / 314
13.5.1 我是老大——mmwinmanager控件管理器 / 314
13.5.2 我是先锋——mmwinsystem控件系统 / 318
13.5.3 我是前台——mmwindesktop控件顶层桌面 / 321
13.6 控件工厂 / 322
13.6.1 抽象工厂之mmwinbasefactory / 322
13.6.2 控件工厂之mmwinfactory / 323
13.6.3 装饰工厂之mmwinproperityfactory / 324
13.6.4 最后的事情——运行项目 / 326
第14章 倾情奉献——因为偷懒而诞生的《卡牌塔防》游戏(上篇)/ 329
14.1 开篇——最后的游戏实例 / 329
14.1.1 为什么是塔防游戏 / 329
14.1.2 《卡牌塔防》功能简介——我们能学到哪些知识 / 329
14.2 启程——关卡编辑器 / 330
14.2.1 一个英雄一个坑——炮台坐标编辑器 / 331
14.2.2 按照我给的路径走——怪物坐标编辑器 / 348
14.2.3 添加更多方便的操作 / 356
14.3 磨刀不误砍柴工——预备知识 / 361
14.3.1 导演的助手——场景管理器 / 361
14.3.2 数据读取模块 / 364
14.3.3 全局参数 / 365
14.3.4 请说英文好吗?不,说中文——i18n工具类 / 366
第15章 倾情奉献——因为偷懒而诞生的《卡牌塔防》游戏(下篇)/ 372
15.1 英雄诞生 / 372
15.1.1 创建关卡场景 / 372
15.1.2 地图层 / 373
15.1.3 实体基类 / 375
15.1.4 英雄管理器1——炮台对象 / 378
15.1.5 英雄管理器2——英雄对象 / 382
15.1.6 英雄管理器3——炮台和英雄的关系 / 386
15.1.7 英雄管理器4——加入创建英雄的功能 / 387
15.2 怪物来袭 / 389
15.2.1 怪物管理器 / 389
15.2.2 移动控制器1——控制器基类 / 394
15.2.3 移动控制器2——移动控制器基类 / 394
15.2.4 移动控制器3——按指定坐标列表移动 / 396
15.2.5 怪物来了 / 400
15.3 英雄进攻 / 404
15.3.1 英雄的一次攻击流程 / 404
15.3.2 在hero里获取怪物列表 / 405
15.3.3 查找并锁定攻击目标 / 406
15.3.4 英雄的攻击 / 407
15.3.5 子弹管理器1——子弹类 / 409
15.3.6 子弹管理器2——子弹管理器 / 413
15.3.7 子弹管理器3——英雄开始发射子弹 / 416
15.4 华丽的装饰 / 417
15.4.1 怪物血量条 / 417
15.4.2 炮台操作按钮——英雄华丽升级 / 419
15.4.3 怪物起点和终点魔法台 / 425
第16章 倾情奉献——因为偷懒而诞生的《卡牌塔防》游戏(终结篇)/ 428
16.1 关卡信息ui / 428
16.1.1 利用ui编辑器制作关卡信息面板 / 428
16.1.2 关卡信息数据刷新——notificationcenter的应用 / 431
16.1.3 怪物数量刷新 / 435
16.1.4 怪物安息——怪物死亡后塔魂数量刷新 / 435
16.1.5 堡垒安息——怪物到达堡垒后扣除魔力值 / 436
16.1.6 打怪升级——英雄升级扣除塔魂 / 438
16.2 谢幕 / 439
16.2.1 关卡选择——根据关卡数加载游戏 / 439
16.2.2 胜利条件判断 / 443
16.2.3 失败条件判断 / 446
16.3 移植游戏到android平台 / 447
16.3.1 傻瓜式的android环境搭建1——准备工作 / 447
16.3.2 傻瓜式的android环境搭建2——解压和安装 / 448
16.3.3 傻瓜式的android环境搭建3——测试一下吧 / 451
16.3.4 准备工作——导入android项目 / 453
16.3.5 一劳永逸——修改android.mk文件 / 455
16.3.6 开始编译——build_native.py文件 / 458
第17章 我不要一个人玩游戏——网络游戏入门 / 460
17.1 只能给你一块敲门砖——本章带给大家的内容 / 460
17.2 左手画方右手画圆——多线程 / 461
17.3 从最简单的开始——从建立连接到接收数据 / 464
17.3.1 偷偷和别人连接——使用odsocket与服务器建立连接 / 465
17.3.2 不务正业——编写一个测试服务端 / 467
17.3.3 言归正传——编写我们的cocos2d-x客户端 / 469
17.4 你得真的像个网游——服务端与客户端交互逻辑 / 471
17.4.1 逃避多线程——更安全的数据接收处理 / 471
17.4.2 进入游戏——服务端通知客户端进入游戏场景 / 476
17.4.3 更多的人——请求在线人数,添加所有玩家到场景中 / 480
17.4.4 新人要报到——有新玩家加入,通知已在线玩家 / 484
第18章 额外的一些东西 / 486
18.1 常见错误及解决方案 / 486
18.1.1 调用可变参数函数时,总是莫名报错 / 486
18.1.2 无法解析的外部符号(或命令) / 486
18.1.3 android移植编译报错——undefined reference to / 487
18.1.4 label变成了一个黑块——多线程引起的bug / 487
18.1.5 中断窗口 / 487
18.1.6 重复切换场景后无端报错 / 488
18.2 游戏发布流程(概述) / 489
18.2.1 给游戏加入广告sdk / 489
18.2.2 加入统计sdk / 490
18.2.3 上传游戏到各个市场 / 491
18.3 未来的趋势 / 492
18.3.1 云后端服务 / 492
18.3.2 社交sdk / 492
18.3.3 cocos code ide / 493
18.3.4 cocostudio / 493
18.4 安全意识 / 493
18.4.1 加密的数据类型,拒绝游戏修改器 / 494
18.4.2 防止打包党的一些小技巧 / 495
18.5 游戏开发思维 / 497
18.5.1 不管游戏多快,一帧就是一帧,我们能做很多事情 / 497
18.5.2 随机应变,利用不经意的bug创造更多玩法 / 497
18.6 最后的最后 / 498
18.6.1 最快速找到木头的方式 / 498
18.6.2 给读者的惊喜——丁小若寄语 / 499
18.6.3 请提供你的意见和你发现的bug / 499
· · · · · · (
收起)