内容提要 |
目录 |
CIP |
序言 |
前言 |
作译者 |
书摘 |
书评 |
最佳拍档 |
你知道什么比玩游戏更好吗?自己编程!制作自己的在线游戏,即使你完全是一个初学者,只要你了解了一些JavaScript编程技巧,就可以做出炫酷的3D游戏。本书利用新的编程特性和新的效果,使游戏编程更容易,游戏更炫酷。当你完成时,你会惊讶你所创造的东西。
学习的最佳方式是玩得开心,本书将带你去玩,玩游戏,玩代码,玩编程!丰富的游戏编程实例和新颖的3D效果,使你的游戏更有趣。想要一个红色甜甜圈吗?你可以做出几百个,像疯了一样旋转。想要创建一个星域吗?造成百上千颗星星,把它们做成红色、绿色或蓝色。爆炸?烟花?行星?这取决于你。
作者专门为本书创建了一个代码编辑器,使用它你可以直接在Web浏览器中进行编程,你会立马看到你的工作和想象结果——就在你刚刚键入的代码旁边!在此过程中,你将获得大量的编程知识,快速进入状态,轻松入门3D游戏编程。
无论你想做什么,这本书都会支持你。最棒的是,你可以创造出很棒的游戏并说:“这是我做的!” |
|
赞誉
译者序
前言
致谢
第1章 项目:创建简单形体 / 1
1.1 使用3DE代码编辑器来编程 / 2
1.2 在JavaScript中创建形体 / 5
1.3 创建Sphere / 5
1.3.1 大小:SphereGeometry(100) / 6
1.3.2 光滑度:SphereGeometry(100, 20, 15) / 6
1.4 用Cube形体来创建立体方块 / 8
1.5 使用Cylinder创建多种形体 / 11
1.5.1 大小:CylinderGeometry(20, 20, 100) / 11
1.5.2 金字塔:CylinderGeometry(1, 100, 100, 4) / 13
1.6 用Plane创建平面 / 14
1.7 用Torus创建甜甜圈 / 15
1.7.1 大小:TorusGeometry(100, 25) / 16
1.7.2 光滑度:TorusGeometry(100, 25, 8, 25) / 16
1.7.3 吃掉甜甜圈:TorusGeometry(100, 25, 8, 25, 3.14) / 17
1.8 让形体们动起来 / 17
1.9 完整代码 / 18
1.10 下一步我们做什么 / 19
第2章 调试:出错时如何修复代码 / 20
2.1 让我们开始吧 / 21
2.2 利用3DE来调试:红色的叉 / 22
2.3 被3DE怀疑的代码:黄色的三角 / 23
2.4 打开和关闭JavaScript控制台 / 24
2.5 利用JavaScript控制台来调试 / 24
2.6 3D程序中的常见错误 / 27
2.6.1 可能会遇到的错误1:Not a Constructor / 28
2.6.2 可能会遇到的错误2:Three Is Not Defined / 28
2.6.3 可能会遇到的错误3:Not a Function / 29
2.7 当3DE代码编辑器卡住时该如何恢复 / 30
2.8 下一步我们做什么 / 31
第3章 项目:创建游戏角色 / 32
3.1 让我们开始吧 / 33
3.2 形体的光滑度 / 33
3.3 把零件拼成整体 / 35
3.4 把整体拆成零件 / 36
3.5 添加能走路的脚 / 38
3.6 挑战一下:设计自己的游戏角色 / 40
3.7 让角色翻跟头 / 40
3.8 完整代码 / 43
3.9 下一步我们做什么 / 43
第4章 项目:移动游戏角色 / 44
4.1 让我们开始吧 / 45
4.2 利用键盘事件创建交互系统 / 46
4.3 根据键盘事件控制游戏角色移动 / 48
4.4 挑战一下:开始和停止动画 / 49
4.5 添加树木的函数 / 51
4.6 让摄像机跟随游戏角色 / 53
4.7 完整代码 / 57
4.8 下一步我们做什么 / 57
第5章 函数:一遍又一遍地执行 / 58
5.1 让我们开始吧 / 59
5.2 基本函数 / 60
5.3 返回数值的函数 / 62
5.4 使用函数 / 65
5.5 搞坏函数 / 67
5.6 进阶代码1:随机颜色 / 69
5.7 进阶代码2:飞行控制 / 71
5.8 完整代码 / 73
5.9 下一步我们做什么 / 73
第6章 项目:摆臂和迈步 / 74
6.1 让我们开始吧 / 75
6.2 移动手臂 / 75
6.3 让双手和双脚一起摆动 / 79
6.4 边走边动作 / 80
6.5 完整代码 / 84
6.6 下一步我们做什么 / 84
第7章 深入理解JavaScript基础知识 / 85
7.1 让我们开始吧 / 86
7.2 在JavaScript中描述事物 / 87
7.2.1 var关键字 / 88
7.2.2 JavaScript变量的值 / 89
7.2.3 代码和注释 / 89
7.3 JavaScript中的数字、文字以及其他东西 / 90
7.3.1 数字 / 90
7.3.2 几何 / 93
7.3.3 字符串 / 94
7.3.4 布尔值 / 96
7.3.5 无 / 98
7.3.6 数据列表 / 98
7.3.7 映射表 / 100
7.4 控制结构 / 101
7.4.1 当某件事为真时才执行的代码 / 101
7.4.2 循环 / 103
7.5 下一步我们做什么 / 105
第8章 项目:让游戏角色转身 / 106
8.1 让我们开始吧 / 107
8.2 面向特定的方向 / 107
8.3 拆开看看 / 109
8.3.1 为什么是rotation.y / 109
8.3.2 别忘记avatar.rotation / 110
8.3.3 停止走动时该面对哪个方向 / 110
8.4 用动画来转身 / 111
8.5 完整代码 / 112
8.6 下一步我们做什么 / 113
第9章 那些自动生成的代码 / 114
9.1 让我们开始吧 / 115
9.2 初识HTML / 115
9.3 设置3D场景 / 117
9.4 使用摄像机拍摄场景 / 118
9.5 使用渲染器绘制场景 / 119
9.6 探索不同类型的摄像机 / 120
9.7 下一步我们做什么 / 122
第10章 项目:碰撞 / 123
10.1 让我们开始吧 / 124
10.2 射线和交点 / 125
10.3 完整代码 / 129
10.4 下一步我们做什么 / 129
第11章 水果狩猎 / 130
11.1 让我们开始吧 / 131
11.2 记分牌 / 132
11.3 让树有点摆动 / 133
11.4 跳跃得分 / 135
11.5 让我们的游戏更好 / 138
11.5.1 添加动画和声音 / 138
11.5.2 我们还可以添加什么 / 140
11.6 完整代码 / 141
11.7 下一步我们做什么 / 141
第12章 使用灯光和材质 / 142
12.1 让我们开始吧 / 143
12.2 发光 / 145
12.3 环境光 / 146
12.4 点光源 / 146
12.5 阴影 / 148
12.6 聚光灯和阳光 / 150
12.7 纹理 / 152
12.8 进一步探索 / 153
12.8.1 获得更好的视野 / 153
12.8.2 最后的调整 / 154
12.9 完整代码 / 155
12.10 下一步我们做什么 / 155
第13章 项目:月相 / 156
13.1 让我们开始吧 / 157
13.2 太阳在中心 / 158
13.3 游戏与模拟逻辑 / 159
13.4 本地坐标 / 162
13.5 多摄像机动作 / 165
13.6 进阶代码1:星星 / 167
13.7 进阶代码2:飞行控制 / 168
13.8 了解月相 / 169
13.9 不完美但伟大的模拟 / 172
13.10 完整代码 / 173
13.11 下一步我们做什么 / 173
第14章 项目:紫色水果怪物游戏 / 174
14.1 让我们开始吧 / 175
14.1.1 准备物理程序库 / 175
14.1.2 准备2D场景 / 177
14.2 构思游戏 / 177
14.3 添加游戏场地 / 179
14.4 添加简单角色 / 180
14.4.1 重置位置 / 181
14.4.2 主动物理模拟 / 183
14.4.3 运动控制 / 183
14.5 添加评分 / 184
14.6 游戏玩法 / 185
14.6.1 发射水果 / 185
14.6.2 吃水果和显示分数 / 187
14.6.3 游戏结束 / 188
14.7 改进 / 191
14.8 完整代码 / 191
14.9 下一步我们做什么 / 191
第15章 倾斜板子游戏 / 192
15.1 让我们开始吧 / 193
15.1.1 重力和其他设置 / 193
15.1.2 灯光、相机、阴影 / 194
15.2 构思游戏 / 195
15.2.1 添加灯光 / 195
15.2.2 添加游戏球 / 196
15.2.3 添加游戏板 / 197
15.2.4 重置游戏 / 198
15.2.5 添加游戏控制 / 200
15.2.6 添加游戏目标 / 201
15.2.7 就这样了 / 204
15.3 进阶代码1:添加背景 / 205
15.4 进阶代码2:制造火 / 205
15.5 挑战 / 208
15.6 完整代码 / 208
15.7 下一步我们做什么 / 208
第16章 了解JavaScript对象 / 209
16.1 让我们开始吧 / 210
16.2 简单的对象 / 211
16.3 属性和方法 / 214
16.4 复制对象 / 214
16.5 构建新对象 / 216
16.6 JavaScript中最糟糕的事情:失去了这个 / 218
16.7 挑战 / 220
16.8 完整代码 / 220
16.9 下一步我们做什么 / 220
第17章 项目:预备,稳定,发射 / 221
17.1 让我们开始吧 / 223
17.2 发射器 / 223
17.3 记分牌 / 228
17.4 篮子和目标 / 228
17.5 风 / 232
17.6 完整代码 / 235
17.7 下一步我们做什么 / 235
第18章 项目:双人游戏 / 236
18.1 让我们开始吧 / 237
18.2 两个发射器 / 238
18.3 两个记分牌 / 243
18.4 让篮子更新正确的记分牌 / 246
18.5 共享键盘 / 247
18.6 游戏重新开始 / 249
18.7 完整代码 / 251
18.8 下一步我们做什么 / 251
第19章 项目:河道漂流 / 252
19.1 让我们开始吧 / 253
19.2 推拉形状 / 255
19.3 崎岖的地形 / 259
19.4 挖一条河 / 261
19.5 记分牌 / 266
19.6 建造木筏 / 266
19.7 重置游戏 / 268
19.8 键盘控制 / 269
19.9 终点线 / 270
19.10 进阶代码:保持分数 / 272
19.10.1 基于时间的评分 / 273
19.10.2 蓄能点数 / 274
19.11 完整代码 / 278
19.12 下一步我们做什么 / 278
第20章 将代码放到网上 / 280
20.1 无所不能的浏览器 / 281
20.2 免费网站 / 284
20.3 将代码放在另一个站点上 / 285
20.4 完整代码 / 289
20.5 下一步我们做什么 / 289
附录A 项目代码 / 290
附录B JavaScript程序库 / 350
参考文献 / 356 |
 |
|
图书在版编目(CIP)数据
3D少儿游戏编程(原书第2版)/(美)克里斯·斯特罗姆(Chris Strom)著;周翀,张薇译. —北京:机械工业出版社,2019.11
书名原文:3D Game Programming for Kids
ISBN 978-7-111-63769-1
I. 3… II.①克… ②周… ③张… III. 程序设计-少儿读物 IV. TP311.1-49
中国版本图书馆CIP数据核字(2019)第219212号 |
|
|
欢迎来到计算机编程的王国!
我不骗你,编写计算机程序有时候确实令人沮丧。几乎每个礼拜我都要被各种难题逼得哭一次鼻子。但是最终你会发现,这些痛苦都是值得的!因为你可以在这个王国中做任何你想做的事情、可以在别人面前展示你惊人的成果,并且也确实可以通过编程去改变世界。
现在,捧在你手里的这本书就是一条通向计算机编程王国的绝佳之路。为什么呢?因为我相信学习编程的最佳途径就是一个字:玩!哦当然了,书中也会有一些讲述基础知识的章节。但我向你保证:本书一定先让你玩得开心,然后再去看两眼基础知识。所以我们还等什么?赶紧去看看第1章吧。里面有一些很酷的3D动画哦!
真的很酷哦!
我是如何学习编程的(为何它对你也很重要)
我小的时候经常从计算机游戏编程的书籍中抄写程序,这是很多年以前的事了。我买过一些除了程序代码之外几乎什么都没有的书,并把里面的程序抄到我的计算机中。这往往要花费很多时间,更糟的是,最开始我甚至不知道自己在抄些什么。
不过最终我开始理解了一些东西,我开始在抄写的程序里改来改去。先是改一些小地方,看看会带来什么不同,然后渐渐地越改越多。最后精通了计算机程序,并开始写一些自己的程序。
我真心希望这本书可以带给你类似的感受。不过有一点不同:我会向你解释清楚所做的每件事将会带来什么结果,你不必像我小时候一样瞎猜。
你该如何学习编程
每个人都不一样,所以每个人的学习方法也不必相同。
我可以列举至少三种适合跟随本书学习的途径:
1)从书里找出好玩的东西来玩,偶尔看两眼基础知识。
2)先学基础知识,然后根据自己的理解自创好玩的东西。
3)只照抄书中的代码(就像我小时候那样)。
你可以选择其中任何一种最适合你的方式。
如果你愿意以玩为主(第一种途径),那么就从第1章开始按顺序阅读。所有标题中有“项目”两个字的章节都是我在带着你“玩”。在这里你的主要任务是跟我一起编写游戏程序,或者模拟程序。基础知识章节穿插于“项目”章节之间。如果你不确定哪一种途径最适合自己,那就别犹豫了:以玩为主一定最适合你。我多希望自己当年就是这样学过来的啊!
如果你认为自己是那种喜欢先打基础,然后再一口气搞个大工程的人(第二种途径),那么可以先把所有标题中不含“项目”两个字的基础知识章节挑出来看完再说。基础知识章节里也有很多程序可以编写,并且有些也包含了很酷的3D图形编程。与其他编程语言相比,JavaScript很简单,看完本书的基础知识章节你就可以学会八九成。不过搞懂一种编程语言,与能够用它来做事情之间还有一道鸿沟。如何才能跨过这条沟呢?“项目”章节就是用来帮你解决这个问题的:从搞懂到会用,需要动手去实践。
最后,如果你只想在计算机上写代码(第三种途径),那就直接翻到书后附录A。本书中所有游戏的代码都在那里。当你偶然被问题卡住时,翻到代码对应的“项目”章节去看一眼更深入的解释就可以得到帮助。不用担心,既然我小时候可以这样学过来,你也没问题!
无论你选择哪种方式来学习编程,有一点必须牢记在心:要动手敲键盘,一行一行输入代码。虽然这样做往往速度很慢,并且在敲代码的过程中,你很可能会犯各种错误,但是学习本来就是一个缓慢且不断犯错和改正的过程。
动手敲代码会驱使你思考正在输入的东西有什么含义。可能你觉得先读懂书中原理,然后再把代码复制粘贴到电脑中试一试也同样能学会编程。但请你相信我,这样做百分之百会失败。那些已经在工作中编写了50年程序的人,也不会通过复制粘贴代码来学习新知识。在敲代码的过程中花时间去思考,远比早早把事情做完更重要。
而且,你知道吗?不断犯错、不断改正出错的代码本就是编程的一部分。所以大胆犯错吧!尽管有时你会因此而苦恼、不开心,但是一切都是值得的。
你看下面这是什么?我们找到了这本书中的第一个“重要提示”!在这本书里,特别重要的内容都会以这种形式出现。建议你不要忽略它们,因为在探索本书的过程中,这些重要提示可以帮你渡过难关。
坚持动手敲代码
那些编程很棒的人永远自己敲代码,他们从不复制粘贴。最重要的不是编得快,而是编得好。一边敲代码一边思考,理解你正在做什么最重要。所以动手敲代码吧!
还有一件事,当你卡在了什么地方时,别担心,你总能获得帮助!
获得帮助
每一名程序员都需要帮助。如果你刚开始编程序,那你一定需要帮助。但即便你已经编了50年程序,你仍然会需要帮助。寻求帮助的两个基本原则是:
1)先开动脑筋自己想,尽量自己找到问题的答案;
2)实在需要别人帮忙时,勇敢地说出自己的疑问。
对于程序员来说,精通一种编程语言并不是最重要的技能,解决问题的能力才是。因为即便你知道一种编程语言里的每一个细节,也不能保证编写出来的程序百分之百没问题。你总会遇到问题,遇到很多很多的问题,所以尽量试着先依靠自己来解决。即便最终没能自己将问题搞定,但你解决问题的能力一定会有所提高。
说到解决问题,我将在第2章专门教你一些技巧,帮助你更好地解决问题。这里包括人们通常都容易犯的一些错误,以及如何借助代码编辑器和浏览器来排查错误。我甚至会告诉你,当一切都乱套时,如何将程序恢复到出错之前的样子。
千万别跳过第2章!
解决问题的能力是如此重要,所以一定不要跳过第2章。不管你打算采用哪一种顺序来学习编程,都要尽早掌握第2章的内容。如果你跳过第2章,可能在刚开始时一切都还好。但是这就像滑雪不踩滑板,开车不系安全带一样,当问题来临时你才会发现它们的重要性。
如果你没能自己解决问题,完全没有关系,我很乐意帮忙。本书有自己的网站以及自己的论坛。你可以在网站上找到书中的全部代码,也可以在论坛里提出你的问题,我将在24小时之内回答问题。提问时,一定告诉我你已经尝试了用哪些方法来解决问题,不然这将是我第一个要问你的事情。
总之,我希望你一切顺利。遇到任何问题时,到我们的论坛上去提问就好。
阅读本书时,你需要些什么
只需要一台不太旧的电脑,以及谷歌Chrome浏览器。
我并不能保证所有浏览器都能显示本书中那些炫酷的3D物体,但至少能保证谷歌Chrome浏览器可以。此外,书中的个别练习程序会依赖谷歌Chrome浏览器的一些功能。所以请在你的电脑上安装谷歌Chrome浏览器。
至于电脑,只要是最近5年内购买的就可以胜任书中的所有程序。万一还不放心,可以访问Get WebGL网站。如果网站说你的计算机不行,那你就只好再去找一台更新一点的了。
JavaScript是什么
世界上有数不清的编程语言,很多人总爱为了哪一种才是最好的而争吵不休。但事实上,每种语言都有自己的必杀技,谁也不能完全战胜谁。
本书中将使用JavaScript编程语言,主要因为可以方便地在浏览器中直接运行它的程序。JavaScript是唯一一种所有浏览器都支持的编程语言,这意味着你不仅可以用它来编写在本书中学到的游戏程序,而且还能编写出你平时看到的那些网站。
第2版中的新东西
其实上一版已经很棒了,但是有人说那本书的内容安排有些不均衡。说实话,我并没感觉到,我觉得第1版已经接近完美了。
好吧,得了吧Chris,若真那么完美,你为何还要写第2版?
嗯,这么说吧,首先自从本书上一版出版之后,很多技术都发生了变化。编程的世界从未停止过前进的步伐。虽然大多数新东西对你学习编程并没有帮助,但是在众多新技术当中,总有一些东西确实无法忽视。在本书上一版出版的三年之后,我发现已经有足够的技术革新能够让第2版书变得更好。
除了新技术之外,促使我编写第2版的另一个原因是我自身的巨大改变。编程人员永远不能停止学习。虽然我已经编了15年程序,但仍然在尽自己所能学习各种新知识。我不停地努力学习,是为了让自己成为更好的编程人员、更好的老师以及更好的图书作者。
本书这一版与第1版有很大不同。删除了一些章节,补充了一些全新的内容。所有保留的章节和代码基本上都重新编写了。新添加的内容还带来了不少很炫酷的新特性。例如第5章中的飞行控制器,以及火焰特效等。不过,追加新特性并不是重写上一版书的主要目的。
主要目的还是使读者感到更有趣、更容易,最终帮助读者成为真正的编程人员。
所以到底有些什么新东西呢?可以这么说,除了极个别已经接近完美的内容之外,第2版几乎处处都是新的。
有什么是这本书做不到的
你以为我会说:只有想不到,没有做不到?不对,让我来澄清一下:
我们并不打算通过这本书成为JavaScript专家。
此外,我们也不打算通过这本书成为3D游戏编程专家。
这本书将教给你很多新知识,但距离编写新一代脸书(Facebook)还有一段距离。当然,也不足以编写一个新的马里奥赛车游戏。因为像这样的大型作品需要几百名编程人员花费几百小时通力合作才能完成,并且还需要用到很多本书无法涉及的高级秘技。
不过通过这本书,你还是可以学到JavaScript最核心的一部分知识,以及许多3D图形知识。利用它们,我们已经可以做很多很酷的事情。更重要的是,我们会为将来参与编写更大型更炫酷的项目做好准备。
让我们开始吧
介绍就到这里,让我们赶紧开始编程吧! |
|
克里斯·斯特罗姆(Chris Strom)是一位孜孜不倦的公众学者,撰写了1000多篇博客,出版了《Dart for Hipsters》《The SPDY Book》和《Recipes with Backbone》等著作。他有超过10年的Perl、Ruby、JavaScript编程经验。 |
|
|
|
|