667中文网 > 恐怖悬疑电子书 > 夜半鬼入梦 >

第337章

夜半鬼入梦-第337章

小说: 夜半鬼入梦 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



    es; gallimard; folio 。

    4。题图来自《西西里的美丽传说》,自己截的。

    5。本来之前的文末有一首诗,想想删了。 brooke   杨宪益译 这个答案末尾可见

    参考文章:(然而都是我写的??):

    劝君莫再谈“游戏”

    如何挽救沉迷守望屁股的玩家

    写在卸载《阴阳师》之前

    游戏与人文

    个人主页:@叶默哲

    想法创意都有了,就差一个程序员了?有没有想过:也许你配不上一个程序员。

    成为一个独立游戏开发者,我认为他自己首先应该成为半名程序员。

    这里是知乎专栏《自学游戏开发》,在上一篇文章《一个游戏是如何被设计和开发出来的》中,我们已经概览了一个大型游戏的开发过程。但是由于程序方面的内容不便可视化展示,所以那篇文章主要是展示了设计和美术制作流程。现在我们需要来讲一讲的程序方面的事情。首先,我们需要认识到:

    1、掌握编程技能的重要性

    如果你想成为一个独立游戏开发者,不会编程几乎是不可能的事情。就像一个厨师不会用刀案锅铲。 “电子游戏”是一个什么?我们这里不谈玩法设计,它的物理本质就可以说是一个计算机应用程序(程序是一串cpu指令、指令是一串代表01的电磁信息集合;请勿再溯源)。开发游戏其实就是开发一个程序(软件)。而开发程序的过程,我们把它叫作 编程。只有学会了编程、掌握了一款游戏引擎,我们才会真正明白:游戏,作为一款软件来说 它的本质是怎样的,它是如何运作的。你不知道汽车是如何工作的,你就制造不出一辆车。了解程序,就是了解游戏在电脑上工作的原理。掌握这些知识,不单单是程序员的立身之本,也应该是每一位游戏设计者的基本素养。再者,如果你从未接触过游戏开发,现在开始学习任何其他游戏开发知识,你是不可能在两个月之内自己动手制作出一款可玩的游戏的。但是,你学习编程与游戏引擎的使用,你便能做到。群友真实经历,@小小故事汇 在我的引导下从职业厨师开始学做游戏,经历两个月的学习之后已经能够独立做出“飞机大战”那样可玩的小游戏了。你若学习美术、或是“设计”,这都不可能实现。这是编程的强大之处。

    作为一个专职的“游戏设计师”(游戏策划),并不是只会拍脑袋出主意就行了。我认为一个合格的“游戏设计师”至少应当能够编写逻辑脚本,把自己设想的主意用代码实现出来,不要把任何细小的事情都塞到专业程序员的待办事项里。职业的程序员会为设计师提供底层的服务,让设计师不用操心计算机底层的事务,只要把精力放在游戏逻辑本身上。事实上,现在各大游戏引擎的设计思路都是如此,比如 unreal engine 4 强大的blueprint系统和cryengine推出的matyc系统,都是为设计师们服务的,让他们不用敲任何代码就能编写出基本的游戏逻辑(基于可视化编程)。 为了让设计师们能够自己动手丰衣足食,程序员们已经做出了许多努力,想成为设计师的你,有什么理由不学习一下基础编程呢?千万不要想:程序的事情就交给专业的人来做吧。“我”就不需要学了。这种人,就是那种常常说“就差一个程序员了”的人;这种人,也常常是那种只会空想,给团队制造试错成本的那种人。因为他们不懂程序,但要让别人来为他的想法买单。他们不知道他们临时冒出的一个“好主意”可能要让一整个团队忙活好几个月。所以,我建议,每一个想要成为游戏设计师的朋友,都接触学习一下编程。

    你只是想静静地画图,做一个安静的美术人员?如果你只是想平静地度过这一辈子,顺便在游戏制作领域出一些力,贡献一些艺术力量,那么你只需要专注于升华自己的艺术上限就好了。如果你想对这个领域搞点事情,比如说优化一下美术资源的制作流程,提升游戏画面的行业标准,那么你就不能只是会用photoshop画画图、用3ds max建建模,你需要知道photoshop这款软件是怎么被开发出来的,它的每种图层混合模式采用了什么算法,这些算法用代码如何实现,如果我要扩展它的调色盘功能应该从哪里开始编写。一个能回答这些问题的艺术家,和一个只会用ps画画的艺术家,对于工具的理解是完全不同的(假设他们的艺术修养一样高)。而前者,更有可能推动整个数字绘画领域向前步进。为什么那些艺术创作软件都出自于国外的开发者呢?开发一款艺术创作软件,不仅需要专业的程序员,更需要具备编程素养的艺术家们来领导。而我国的艺术从业者们,有几个具备扎实的编程能力? 而往往一说到这些,那些“大师”们就会开始贬低工具的重要性,转而强调艺术本身。从“从艺动机”层面,许多选择艺考的人其实就是因为文化成绩太差;从思想层面,几乎少有艺术家会想去改进他们所用的工具。如果你不是这样的人,如果你想要成为一个推动数字艺术领域进步的人,有机会的话,你就应当认真了解一下计算机的世界。另外,回到游戏美术本身,一个游戏最终如何展现你画的图、你做的模型,这完全是由渲染管线和shader脚本来控制的,这些都是代码写出来的。所以你认为游戏美术只是画画?那只是其中的一个小环节。当然了,说这些只是希望你能对游戏美术具备更多的认识。至于初学,我还是不会给你徒增痛苦让你去学编程的。别紧张,从窗户上下来吧朋友。

    包括做音乐也是,现在编曲软件之强大,无不是具备音乐素养的程序员们的功劳。奥巴马说每一个现代人都应该学一下编程,不是随便说说的。写到这里,我希望每一位读者都已经在心里提升了掌握编程能力的重要性。

    在后文中,我们开始来认识一下计算机与编程的世界,再之后是编程与游戏制作的关系,最后是编程学习路径。我会力图让每一个高中生看到下面的文字时也能够理解我在说什么,你不用具备什么前置知识,嗑着瓜子顺序看下去便好。

    2、计算机与编程的世界

    是先学c还是c#?还是java?还是python?还是unity?还是opengl?首先你都知道这些是什么吗?每一个想学游戏编程的人都经历过这样的问题:入门编程语言该学什么?我在知乎问答想要自己做一款游戏,需要学习哪些知识?中明确说明了先学c#再学unity。但是仍然有无数人私信问我到底该先学c还是c#。这不是因为他们没有认真看我的回答,而是他们不知道为什么要这样安排,以及很多其他前辈建议他们要先学这样或那样。道听途说,只言片语的回答是解决不了大家心中的困惑的,因此在本篇文章中我想为大家介绍一下计算机和编程语言的世界,这可能会花费一些功夫,因为从来没有人能够在一篇文章的篇幅内完整地介绍整个计算机的世界。我也只能尽力尝试,让大家了解那些语言各是什么,之间是什么关系。在此章节完成之后,我再会解释我们学习安排是如何设置的。

    请注意,我现在要开始装逼了:这件事情如果要溯源的话最早可以追溯到亚里士多德开创出“逻辑学”;19世纪的乔治·布尔在此基础上发展出“数理逻辑”(如果你已经开始学编程的话一定会知道关键字: max里也有“布尔”运算。就是以此人之名。);20世纪克劳德·艾尔伍德·香农在“数理逻辑”基础上发展出“逻辑电路”。“逻辑电路”就包括了我们高中所学的:继电器、与门、或门、非门、异或门等等。利用这些工具,我们就能够制造出会计算加法、减法的逻辑电路。(还有非常重要的“触发器”、“振荡器”等等。后来的一系列发明,比如说:电子管、晶体管、集成电路可以统统看成是对前面技术的升级和替换。)我们得到了会计算的逻辑电路,又经历了一系列的升级和优化,那么现在我们的计算机是如何运作的呢?首先可以分为两个层,一层是cpu&存储器的电路实现,一层是0与1的世界。如果我在这里讲电路设计的问题,我想很多只是单纯想做游戏的人可能会疯掉(其实是我讲不来)。有一本很好玩的书,叫《穿越计算机的迷雾》,作者以闲谈扯淡的方式,从电与磁的发现一直讲到了cpu的实现,作为计算机硬件入门是一本不错的兴趣书。关于硬件,我们业余选手可以不用知道那么多,只要知道:cpu会执行我们的一些命令,我们的命令是存在“存储器”里的0101010110101001010…这样的数字来代表。

    作为常识我们知道,计算机只认识0和1(至少你现在知道了),那么我们就来看一下它是如何运用0和1来工作的。

    汇编:

    请注意为了方便讲解我就自己创造例子了,可能和实际情况有出入,但是更容易帮助理解。先看一下这一行代码:

    00000001 00001100 00001010

    看不懂?普通人类当然看不懂,但是机器看得懂,而且机器就只能看懂这种形式的信息。这个叫做机器语言,也是二进制码。二进制码是构成如今计算机世界的基础,我们电脑里的任何文件、应用程序归根结底的都是以二进制码的形式存在的。比如:我们常常能够在电脑的文件夹里看到这样一个文件夹:

    这其中“bin”就是单词“binary”的缩写,意思是二进制文件。打开bin文件夹,xe和。dll文件。对于我们来说,。exe就是一个应用程序嘛,比如说:xe、xe。

    大家难道没有好奇过:为什么应用程序的的后缀是“exe”呢?原因:“exe”是英文词组“executable file”的缩写,意思就是可执行文件。“可执行文件”的意思是:可以被cpu执行的文件。我们前面说过,cpu只能执行0101001这样的指令。所以“可执行文件”其实就是这种指令的集合,也就是是一堆二进制码 “00001111 01010011 00100110 00001111 01010011 ……”。所以它才会常常被放在ry)文件夹里。(有没有发现,那些曾经我们看不懂的文件夹结构、文件名后缀,其实设计得都是有道理的)

    我们玩的每一个游戏,它们的本质都是这样的二进制文件。所以编写一个游戏,其实最终最本质就是编写出这样的文件:0101010101110010101010101001010101……可是……

    我知道这也太特么为难人了!鬼看得懂这些01是什么意思啊!(鬼:我也看不懂啊~)但没有办法,现代的计算机只能识别这种简单的机器语言。(即便是量子计算机也是玩01这样的量子比特) 为了让这些机器语言更容易被我们人类所理解,先驱们发明了汇编语言。bly language”)但其实汇编语言很简单,有了汇编,我就能跟你解释前面的0011是怎么回事了。再来看之前的那行代码:

    00000001 00001100 00001010

    请注意这不是一串随便瞎写的0和1,它是有规律的!你们看,以八个0或1为一组,每组中间有个空格。e),每一个0或者1,我们叫做一个“比特”(bit)。第一个字节:00000001,假设我们规定,它代表一个命令:加法(add)。我们再规定,如果cpu遇到“加法”命令,它就把后面两个字节相加,把结果存到前一个字节所在的地方。于是我们的cpu就能够计算加法了。规则是给它这三个数:

    第一个是表示加法命令的“00000001”,第二个a和第三个b是两个加数,每次都不同,所以我用x表示那些比特位。同样的道理我们能够制定出减法命令、乘法命令、复制命令等等。比如复制命令:我们规定“00001111”代表复制命令,如果cpu遇到“00001111”,它就把后面第二个字节的数据,复制到后面第一个字节的数据所表示的位置上(注意这些字节里的二进制数不仅可以当数字用,也可以当命令用,也可以用来表示储存位置)。于是我们就有了复制数据的功能了。

    这些功能,都是cpu中的逻辑电路为我们提供的,我们只需要发送规定好的指令便能使用这些功能。注意,指令的本质是一串0和1代表的信息,但是我们很难去记忆和区分1101这样的数字,所以我们就用“add”代表00000001(加法指令),用“py”代表00001111(复制指令)。在英文里本来就是加和复制的意思,这就很好记。而“add”、“py”等这些指令集合起来就形成了汇编语言。它实际上就是把机器语言(一串0和1)直译成了英文单词。一般cpu认识的指令不多,就那么十几个(加上变种一般也就几十个)。所以汇编语言中的指令一一对应也不多,大致分为三种:

    数据传输类:复制、加载、存储……算数/逻辑类:布尔运算、加法运算、自加运算……控制类:转移、停止……

    就这么几个指令能干啥?你别说,我还真有办法能让你亲自见证一下,就这么几个指令,可以让cpu干些什么事。achine》这个小游戏。然后开始玩吧。我已经让群友们验证过了,不管有没有学过编程都可以玩几下。而游戏的主体内容,其实就是以一种有趣的方式在写汇编代码。在过关这个游戏之后,你会发现你自己用这几个最简单的指令,让计算机实现了一些简单的功能,诸如:比较两个数字的大小、判断一个数字的正负、让计算机数数、用加法实现了乘法运算、从一组数中找到最小的数……如果你在游戏里过五关斩六将实现了这些功能,那么你就相当于解决了上个世纪计算机科学早期那些先驱们所面对的问题。给自己一个奖励吧,点击文章末尾的“赏”就会看到编程学习大礼包!额,你说你没有通关?没关系,最后几关是比较难,而且这个游戏只是为了让你体验一下汇编编程的感觉。

    现在你会发现,汇编语言其实没有多复杂,而且比起那些0011的代码,真是太好识别了。但是那还不够,比如我要计算一个:

    *z++p…2

  

返回目录 上一页 下一页 回到顶部 3 3

你可能喜欢的