Cocos2d-x游戏开发之旅

作者:钟迪龙著 页数:488 出版社:北京市:电子工业出版社 出版日期:2013.08 

 

Cocos2d-x游戏开发之旅

 

有需要联系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

Cocos2d-x游戏开发之旅

上一篇:【题解】【数组】【Leetcode】Merge Sorted Array


下一篇:do {...} while (0) 的用途汇总(欢迎补充)