按空格键开始
如果你只有几秒钟的时间来学习游戏开发,这里有一个超级浓缩的版本。获取用户输入。把所有东西稍微移动一下。检查是否有重叠。画出一切。每秒重复60次。
如果你有多余的几分钟,那么这是扩展版。电脑可以做一个很多很快。它可以更新敌方坦克部队或虚拟兔子群的单个位置。它可以发射导弹或种植胡萝卜或产生美丽的粒子效果。它可以检测任何发生的碰撞。它可以在屏幕上画出所有东西。都在六十分之一秒.
游戏开发类似于编排实时、互动、定格动画电影。每次屏幕更新(称为一个框架,通常只持续大约16毫秒),演员都只移动了很小的幅度。这些微小的量会累积起来,所以高速回放会产生错觉的运动。游戏开发几乎完全是关于创造幻觉。如果你想让某些东西“行走”,首先显示一个张开腿的角色的图像几帧,然后切换到闭着腿的图像几帧。如果你注意时机(和美术风格),你就会有令人信服的效果步行周期.
动画和移动只是我们每帧必须做的一件事。在最高级别上,主游戏循环(每帧运行一次)是这样的:
这个高级循环并没有解释如何协调和管理所有这些操作,但它是一个简单的模型,可以让我们开始思考游戏的核心是如何运行的。
这是一个游戏所需要的。不要想太多,不要过度设计。只要意识到电脑可以做一个很多在六十分之一秒的时间里,一堆小动画和互动很快就会变得比各个部分的总和还要多:人类的大脑很擅长将生命归因于无生命的物体。从一个在屏幕上移动的正方形开始,加上其他向相反方向移动的正方形,看看它会变成什么样子并不需要太多的想象力超级马里奥兄弟。!
这对你来说可能很奇怪
如果你有函数式编程或web背景,那么在循环中按顺序做所有事情的想法可能看起来有点“程序化”,但这只是在高层次上。游戏最终是一个大球状态.你可以随心所欲地对这种状态建模。但认真:尽可能保持简单对于你最初的几款游戏!
游戏设计
我们该如何将“主循环”这一高级理念应用于制作真正类似游戏的内容?作为一个领域,电子游戏设计仍然很年轻,但它已经有足够的时间来开发和完善一套,好吧,不是“法则”,而是更像是规则、指导方针、格言、最佳实践、学术理论、神话和传说。
游戏设计(与game不同)发展)是关于利用这些集体知识来改进你的游戏。幸运的是,你不需要精通整个游戏设计领域,就像你不需要了解音乐理论就可以组建乐队并创作出优秀的歌曲一样。但你学得越多,你就能越快弄清楚为什么有些事成功了,有些事不成功。你知道的规则越多,你就能打破更多的规则——对你的选择有合理的信心。
我不打算深入探讨游戏设计的本质;这方面有很多很棒的资源。而且,就像所有的学术努力一样,一旦你开始,它就是一个深深的兔子洞。有很多书都在简单地定义什么是“游戏”!如果你想开始冒险,就从《游戏设计艺术:镜头之书杰西·谢尔著。在早期阶段,我们主要关注的是语言这样我们就可以继续我们的游戏开发之旅,并达成一致。
可以说,游戏最重要的方面就是它力学.一个游戏玩法指的是特定的游戏玩法元素。它是你的游戏的单个方面的目标或目的——执行规则或鼓励探索以理解游戏的东西。通常情况下,你将拥有一大堆共同构成整体游戏玩法的机制,但定义游戏玩法的元素(或元素)本质让你的游戏与众不同的是核心机械.
例如,在平台游戏中,“跳跃”是一种机制(非常关键!)也许在你的游戏中核心机械玩家在奔跑时可以跳得更远。这让作为游戏设计师的你能够创造一些情境,即玩家需要选择他们应该做的是长跳还是短跳,并做出相应的反应。在添加、修改或删除机制时,你必须非常小心,因为这些会彻底改变你的整个游戏形态。
与游戏设计密切相关的是关卡设计.设计关卡并不是关于使水平思考关于制作关卡!一旦你定义了游戏机制,你就可以开始将其塑造成你想要提供给玩家的整体体验。也许最初的几个关卡需要一些长距离跳跃,但随着游戏的发展,它们变得越来越有必要——直到玩家几乎只需要进行长距离跳跃。然后,在关键时刻,交替进行长/短/长跳跃,让他们感到震惊和惊讶,让他们保持警惕。
关卡设计是用来控制游戏的踱来踱去.踱来踱去就是游戏如何随着时间发展。高度紧张的时刻在哪里?哪里有平静的时刻?它们的结合有多自然?图1展示了经典电影的情节紧张循环。它不能只有爆炸和追车,否则很快就会变得无聊。你必须改变难度——也许从简单开始,然后逐步增加难度。但不要太久,否则玩家会感到疲惫。应该会有一段放松的时期,也会有令人惊讶的高潮和低谷。节奏是阻止玩家在掌握核心机制后感到无聊的方法。
随着机制和节奏的调整,我们需要讨论艺术。在这本书中,我将区分图形而且美学.它们是相关的,但又非常不同。图形由艺术家创造的图像组成——组成字符、标识和背景的像素。美学在更高的层次上关注游戏的外观和感觉——呈现的整体主题,它所产生的情绪,颜色,符号的使用,以及艺术目的的图像。
美学总是比图像更重要。一款具有一致性和连贯性美学的游戏,即使图像并不出众,也能在视觉上给人留下深刻的印象。这对我们这些不擅长ps的人来说是个好消息。
最后,汁.这个术语可能不会出现在很多学术文献中,但它对于创造令人感觉良好的游戏来说是必不可少的。果汁是润色,是对细节的关注,是必要的可有可无,是爱。这是当物体爆炸时的晃动屏幕,玩家奔跑时的小颗粒轨迹,平滑的反弹动画和用户界面中的效果。其中许多都很容易添加到你的核心机制之上,我们将在开发过程中添加大量此类内容。
现在我们已经掌握了行话,让我们来定义本书(以及你的前几款游戏)的主要目标:创造一个简单但有趣的游戏核心机械,加上令人信服的关卡设计,很好踱来踱去,令人愉快的审美,还有一大堆汁!
简史
多年来,自己制作(和销售)游戏的可行性时起时伏。最初的商业视频游戏和家用游戏机(如1977年发布的雅达利2600)孕育了我们今天所知道的许多游戏类型:》(在平台上奔跑跳跃,收集硬币和宝藏,寻找关卡的终点),rpg(角色扮演游戏,探索丰富的世界和发展角色的技能),以及横向卷轴射击游戏(爆破坏人和获得更强大的武器)。所有这些都起源于70年代简单的块状方块。
这些机器是新的复杂的野兽,功能非常有限,为它们编程需要熟悉的硬件知识。80年代的家用电脑革命带来了更强大的功能、更好的图形和更简单的开发。它引发了第一波独立开发者和小团队制作大受欢迎游戏的浪潮。
90年代为我们带来了16位时代,事情变得更加复杂。掌握硬件架构要困难得多,新机器的图形和声音能力比8位的同类机器要令人印象深刻一个数量级。游戏开发团队变得越来越大,游戏本身也变得越来越昂贵。一人点击(如Éric Chahi的)另一个世界,或在这个世界之外)变得越来越稀少。
硬件的进步给我们带来了任天堂64和playstation这样的机器,即使你是一个编码和图形之神,你也无法为这些机器开发软件。它们需要昂贵且难以获得的授权开发工具包和专门的开发硬件。大型游戏制作公司统治着游戏世界。团队中的员工成千上万的人在一个强大的游戏开发机器上工作,创造史诗般的电影般的作品。“AAA级游戏”的时代已经到来,孤独编码员的时代已经被放逐到“共享软件”和小型Flash游戏的世界。
但在2005年前后,奇怪的事情发生了。世界开始厌倦AAA级游戏一遍又一遍地重复同样的游戏。游戏开始变得乏味乏味。突然之间,有趣和新鲜的想法就出现了,即使他们没有大量的开发预算疲惫的射手,17!大约在同一时间,第一代iPhone的发布为手机游戏打开了一个全新的市场——这一次玩家们真的愿意这么做支付对他们来说(不像共享软件)。在互联网的另一部分,开设了一个数字游戏分销商店叫做蒸汽促进新游戏在线交付给数百万客户。完美风暴袭来,小团队在没有发行商或资金支持的情况下制作了大量游戏。“独立游戏开发者”的时代开始了。
游戏和JavaScript
JavaScript和Web在这段历史中明显缺席。游戏使用互联网作为数据传输机制(当然网页浏览器需要承载Flash插件),但仅此而已。当JavaScript被用于游戏时,它是用于简单的指向“n”的点击事务-卡片和桌面游戏,或小型实验。这并不是说那时候不可能创造出“真正的”游戏。2004年发行的DHTML旅鼠证明了创造街机风格的游戏是可能的,经典游戏的忠实再现——包括动画,声音,甚至粒子爆炸。尽管它令人印象深刻,但它被视为一种新奇事物,而不是一个有前途的游戏开发平台的诞生。
网络游戏的最大障碍是缺乏像素级访问。一切都必须通过DOM使用标准HTML元素,例如div
容器和图像。不可能以任何有意义的方式创建或操作现有图形。随着Canvas 2D API(我们将在下一章讨论)和WebGL(我们也将在后面讨论)的引入,这种情况发生了变化。突然之间,你可以在运行时绘制形状、操作位图和创建令人印象深刻的效果。一些小的实验被孵化出来,JavaScript游戏的热潮开始了。
就在不久前,在同一个句子中提到“游戏”和“JavaScript”会让你在任何体面的游戏开发论坛上笑出声来。“真正的游戏是用c++写的。”c#可能是可以接受的,但是忘记关于动态语言:它们太慢了,什么都做不好!不可否认,这句话曾经是非常正确的,但现在就不那么正确了。谷歌Chrome的引入引发了一个全新的浏览器战争时代,每个浏览器制造商都实现了越来越快的JavaScript和渲染引擎,为Web带来了接近本地的速度。
反对JavaScript的争论已经消失了,但不要指望游戏开发论坛上的低级程序员会注意到这一点!JavaScript从玩具到生产工具的转变发生得非常快,而大多数人都没有注意到这一点。现在,它已经成为制作大型游戏的可行语言,可以轻松部署到任何平台。
JavaScript的优势
JavaScript最明显的优势在于它无处不在。这是不可避免的。这几乎是强制性的.由于计算机历史的曲折,JavaScript是世界上最受欢迎的语言之一。如果一个设备可以编程,那么它很可能运行JavaScript。
无处不在是件好事,但这并不是JavaScript适合游戏的原因。
JavaScript是一种动态的、基于原型的语言。随着游戏变得越来越大,人们意识到与传统面向对象编程相关的问题。它可能导致复杂的、不完整的类层次结构,这种层次结构不灵活,并限制了代码重用。在游戏开发中,有许多模式和最佳实践可以避免这些问题,但好消息是JavaScript在默认情况下具有灵活性。它让我们在前进的过程中塑造我们的需求,而不是从一开始就定义它们。我们可以轻松地改变、调整和组合组件和功能——这对于创建原型和试验游戏创意来说是非常棒的。
我们也正在见证一个核心语言改进的伟大时期。自ECMAScript 2015(又名ES2015, ECMAScript 6和ES6)以来,语言审批过程得到了加速和简化,允许大量改进和功能,解决JavaScript的许多缺点,同时建立在语言的优势之上。我们现在有了模块、类、改进的作用域功能、更好的函数和对象语法(和新特性)、映射和集合、代理……这个列表非常庞大。但结果是,我们现在可以编写更清晰、更简洁的代码,而不太可能碰到JavaScript的历史缺陷。
JavaScript的另一个巨大好处是它与Web的隐性合作关系。用JavaScript编写游戏意味着我们可以免费获得所有Web功能。每个添加到浏览器的新功能和API都可以立即用于我们的游戏中。无论我们做什么,都可以很容易地分发给全球大量的观众!我们甚至获得了一些专为制作游戏而设计的API: Gamepad API实现了游戏控制器支持;Pointer Lock API让我们能够像处理原生应用一样处理鼠标移动(创造鼠标控制游戏而不会失去焦点);尽管Web Audio API并不是专为游戏设计的,但它最终让声音成为了网络上的一等公民。
JavaScript的局限性
每种语言和编码环境都有其利弊。(这就是为什么有不止一种语言!)因此,了解工具箱的优点和缺点非常重要。JavaScript最大的弱点也是它的优点:动态特性。
动态类型非常适合玩游戏和塑造游戏形状。但一旦形状确定,就很难实施了。例如,我们可能知道玩家的生命应该是一个数字(的球员。生命= 3
),但没有什么能阻止我们说的球员。生命= "你好"
,即使它没有意义。静态类型帮助我们推理正确性程序的。如果编译器知道每个值的“规则”,它就可以在代码运行之前分析源代码并检测错误。具有强类型系统的语言可以避免经典的运行时消息Undefined不是一个函数
.
将静态类型引入JavaScript
目前有几种将静态类型引入javascript的尝试——最流行的是TypeScript和Flow。这些工具允许您向源代码中添加类型信息,用于强制执行正确的类型。这段代码在部署到浏览器之前被转换为标准JavaScript。就我个人而言,我喜欢javascript的动态特性,但您当然应该自己评估它。
网络生活的另一个有趣的部分是在所有浏览器上100%正确地工作。当依赖于W3C尚未正式定义、浏览器制造商尚未完全实现的前沿特性时,这尤其困难。所以尽管你仍然可以玩DHTML旅鼠从十多年前开始,许多使用全新HTML5功能的演示都很容易出错,因为规范的最终确定需要时间,浏览器制造商对需求的解释也不同。
跨浏览器的问题还延伸到其他方面平台您可能希望部署到。JavaScript可以运行到处都是,但是您的浏览器和支持javascript的烤面包机之间的功能和部署过程将完全不同!你可以将HTML5游戏作为原生应用在手机、平板电脑和主机上运行,但每个平台都有自己的特点。虽然有一些框架和服务可以让事情变得更简单,但没有一刀切的解决方案。
HTML5游戏的未来
如果你正在探索如何开始自己的游戏开发生涯,HTML5是一个不错的选择。网页游戏的功能和功能在不断增加和完善。它可能还没有针对最新低级图形api的原生c++代码快得惊人,但差距总是在缩小。如果您现在才刚刚起步,那么Web将在未来很长一段时间内领先于您的需求。
很长一段时间以来,Web一直是许多游戏工作室的可行部署目标。早在2012年,绿心游戏公司就发布了他们令人上瘾的“游戏开发模拟器”,游戏开发大亨在Steam上,几乎得到了普遍的好评;至今仍有95%的好评率。2012年用JavaScript编写的一款游戏开发模拟游戏非常具有颠覆性!
其他早期的先驱包括Lost Decade Games的动作RPG,巫师的蜥蜴这款游戏也在Steam上发布了。这些游戏都是从头开始编写的(就像我们在这本书中所做的一样)——因为没有其他选择!后来令人印象深刻的努力《Airscape:地心引力的坠落,下一个佩内洛普而且好奇的探险它们都是非常精致且具有深度的不同游戏。他们证明了有限的技术并不会成为创造优秀游戏的障碍。
最近,所谓的.IO游戏这是一种休闲mmo(大型多人在线游戏).io
域名,因此得名。例子包括Slither.io,以及漂亮的像素艺术,砍' n ' -斜杠游戏Wilds.io,由przemyssawsikorski(又名Rezoner)编写。
如果你通过各种应用商店去看看这些游戏,或者阅读它们的宣传材料,你便不会看到任何关于HTML5或javascript的内容—-这并不是因为他们不以此为傲,而是因为这并不重要!最终,没有人在乎你使用什么技术去创造游戏,只要它是优秀的。
HTML5只是提供了一个强大而灵活的生态系统,作为制作优秀游戏的基础。
足够的讨论;让我们一起制作游戏
如果你还在这里,你就会迫不及待地去创造一些游戏。最好让事情尽可能简单,这样你就可以轻松地开始工作,无论什么时候你的脑子里突然冒出一些想法。我们的计划是完全从零开始,从头开始编写所有内容。随着我们的进展,我们将分离出与游戏无关的元素(游戏邦注:即可以在不同游戏中重复使用的元素)。这些元素将进入一个小型库,我们将在此基础上创建和构建未来的项目。
这些只是指导方针
请注意!我们在这本书中所做的每一件事——我们如何组织我们的项目,我们构建的库,我们如何命名我们的方法和编写每一行代码,整体架构,我们生成的敌人宇宙飞船的数量,以及需要多少子弹来爆炸它们——都是所有只是一个指导方针,一个建议。不要害怕把事情搞砸,用你自己的方式去做,改变事情。实验无情.适应新想法的最好方法是自己重写它们。请随意沿着我们走过的路走,但不要害怕走越野。
让我们从HTML框架开始游戏,我们所有的例子都将从中派生。虽然我们正在制作游戏,但我们仍在使用网页技术。我们仍然需要HTML、CSS和JavaScript。唯一的区别是我们把它们结合在一起看起来与其说是网页,不如说是游戏。游戏开发就是创造幻觉!
我们游戏的一般结构是这样的:
我们有一个源目录src
对于特定于游戏的文件,供应商
我们可能需要的任何第三方库,最后res
用于游戏资源,如图像、样式表和音频文件。的index . html
文件包含一些非常简单的标记,让我们开始:
<!文档类型超文本标记语言><超文本标记语言><头><元字符集="utf - 8"/><标题>游戏标题><链接rel="样式表"href="res / main.css"/>头><身体><divid="董事会">div>身体>超文本标记语言>
这里是第一个提醒:这是只是一个指导!您可能已经知道您喜欢如何组织HTML文档——所以就这样吧。唯一有趣的是董事会
我们将使用Div作为游戏的容器元素。(之所以称之为“棋盘”,是因为我在100万年前就开始这样称呼我的“游戏棋盘”区域,并且一直沿用至今。)通过样式表,它有一些最小的样式res / main.css
将它置于页面中央,并将其拉伸到所需的尺寸:
#板{宽度:640px;高度:480px;保证金:汽车;}
我们可以使用许多技巧来保持我们的游戏是一个有凝聚力的、无缝的工件的错觉,但CSS的力量是最简单的之一。网页的背景可以保持纯色,也可以用样式来匹配审美这个游戏。周边地区#板
可能是空白的,也可能是彩色的面板,就像装饰旧街机游戏柜的那种。使用任何适合你的游戏的元素,以及任何能够让玩家沉浸在游戏体验中的元素。我们不会在css上花费太多时间,但不要忘记它总是可用的。
我们项目框架的最后一步是添加一些代码——一个简单的JavaScript文件,这将是我们游戏的主要入口点。为了纪念JavaScript的共享C语言遗产,我们将它保存在我们的src
目录main.js
:
常量gameType=“awesome”一词;警报(`让我们做$ {gameType}游戏!`);
有些人可能对我们的第一个代码片段不熟悉。的常量
关键字(将变量定义为常量,不可变)和模板文字字符串(包含反勾号的字符串,允许嵌入式替换)是JavaScript ECMAScript 2015标准的一部分(参见SitePoint书籍必威西盟体育网页登录JavaScript:新手到忍者如果你想阅读更多关于JavaScript新特性的信息)。我们的游戏将利用现代JavaScript,所以确保其正确执行非常重要。要验证它是否运行,请将源文件作为JavaScript模块包含在index . html
:
<身体><divid="董事会">div><脚本类型="模块"src="src / main.js">脚本>身体>
模块
在编写的时候,JavaScript模块ECMAScript的实现已经作为ECMAScript 2015标准的一部分完成了,但是浏览器的支持并不是通用的。本书的代码示例也已通过Babel JavaScript编译器编译为“常规的旧JavaScript”,但这只是短期解决方案,最终将不是必要的。查阅“构建工具和工作流程”更多信息请参见本章后面的章节。
如果你有弹出提醒工作,这是足够好的项目基础!让我们快速破解一些逻辑,创造出世界上最不令人兴奋的游戏之一:“我在想什么数字?””游戏。删除警报
并将其替换为我们的游戏代码:
常量myGuess=数学.地板上(数学.随机()*20.)+1;让猜测=0;让猜一猜;
首先,我们设置变量来保存猜测的总数,并在1到20之间选择一个数字。现在我们询问用户的猜测,并将其与我们的猜测进行比较:
而(猜一猜= = !myGuess){猜一猜=方法用于(提示(“我想的数字是多少?”),10);猜测++;如果(猜一猜<myGuess){警报(“高”。);}其他的如果(猜一猜>myGuess){警报(“低”。);}}警报(`做得好!你成功了$ {猜测}!`);
首先将用户的猜测解析为整数。如果猜测值过高或过低,则发出适当的消息。如果答案正确,就说“干得好!”游戏很无聊略如果你变了会更有趣myGuess
从1 / 20到1 / 99999999!),用户界面基于警报
而且提示
对话框非常烦人。但尽管如此,它包含了我们需要的主要元素所有游戏:一个无限循环,一些游戏逻辑和渲染系统。
的而
循环运行,直到我们得到正确的答案:它是我们的主游戏循环.的提示
是我们的用户输入机制;游戏逻辑将决定我们是否有碰撞(猜对了);而且警报
是我们的渲染系统,为玩家提供反馈。为了制作一款真正的游戏,我们只需要用图像绘制来替换提醒,用键盘控制来输入提示,然后就变成了一款电子游戏!
希望在这个阶段,你已经准备好把自己的大想法搬上银幕了。但在我们开始之前,我们有一些管理任务需要安排好。我们需要选择一些基本的工具,我们需要建立一个富有成效的项目工作流.如果你在任何时候感到困倦,浏览标题恰当的部分“保持动力”。
艺术创作
在我们的前几款游戏中,我们可以使用基本的几何形状(如正方形和圆形),但我们很快就会转向一些更令人印象深刻的东西。也不要急于忽视简单的形状,因为它们可以产生良好的效果。热门独立游戏托马斯独自一人完全由矩形和圆形组成——然而审美的选择在这些简单的形状中注入了如此多的情感和个性。
但我们假设矩形是不能解决问题的。我们想要一些艺术品。也许你是一个画画很好的艺术家,你是一个使用图形编辑软件的巫师……但更有可能的是(像我一样)你会制作程序员的艺术.我可以试一试比如说,画一匹马——我问任何人都可能会猜那是一匹马——但它不会获得“最佳马画”的任何奖项。如果你也是这种情况,最好从简单的开始矢量插图或低分辨率像素艺术.这两件事都不“容易”,但只要稍加努力,你就能得到一些不错的结果——如果付出很多努力,你就能得到一些伟大的结果。
矢量插图通过组合和操作基本形状、多边形和路径创建。因为图像是用点(而不是实际像素)描述的,所以可以在不丢失任何信息的情况下对图像进行着色、拉伸、调整大小和编辑。对象可以很容易地复制粘贴和重用,而不会损失质量。
现在有一些很好的基于矢量的编辑软件包。之是我推荐的免费开源矢量编辑器。它在不断的发展和改进中,你会发现周围有很多资源可以帮助你掌握它。还有一些很好的商业选择。Adobe Illustrator(矢量编辑的Photoshop)被许多专业设计公司使用亲和力的设计师而且草图.
所有这些套件之间的概念基本上是相同的-通用教程任何软件通常适用于所有人。如果你想学习如何开始为游戏制作图像,请前往非常优秀的网站面向程序员的2D游戏美术网站的一些初学者友好的矢量编辑教程,使各种游戏资产。
软渲染
当使用矢量软件时,你很可能需要一个软渲染步骤,因为矢量最终将以位图图像的形式显示在游戏中(除非你使用的是svg——我将在下一章说一点)。通常,栅格化只需要选择以PNG格式输出函数从你的矢量软件包。
如果你在寻找一种不同的审美,但仍然想保留东西合理的很简单,你可以尝试低分辨率像素艺术。像素艺术艺术作品是在像素级-手动放置单个像素,而不是使用大型画笔来做诸如反锯齿和平滑之类的事情。这种风格起源于电子游戏的早期,当时电子游戏角色必须在图纸上设计!
像素艺术的实际技术定义并不重要(你可以在网上讨论),但对我们来说,它是一种有用的美学选择,可以创造出“8位”和复古的游戏。我是这种风格的忠实粉丝!
好像素艺术是非常困难的。合理且可用的程序员像素艺术并不难,而且尝试起来非常有趣。最重要的技巧是:你的美术水平越差,你就应该保持越低的图像分辨率。如果你的游戏角色有一个很大的画布,你就需要放置大量像素,而且你必须擅长绘画。如果你做一个小画布——比如16x16像素——你可以制作出更抽象、更具标志性的游戏角色。稍加修饰,它们甚至可以看起来很不错!随着你的改进,你可以增大画布的大小。16个像素是但确实很小,所以你可能需要在游戏中使用它们之前调整图像的大小。
要创建像素艺术,您有几个选项。你可以使用一个专门的像素艺术编辑器,如优秀Aseprite编辑器,这是专门为像素艺术设计的。它的所有工具和功能都在像素级工作。您还可以使用更通用的图像编辑器,例如GIMP(免费开源),油漆。网(Windows)和Pixelmator做出很棒——(macOS)可以作为像素艺术编辑器工作,尽管你需要配置他们的工具来绘制和擦除单个像素。
当然,一个更简单的选择是使用别人的艺术——当你不会画画的时候,这是一个非常诱人的选择!有各种各样的在线资源可以根据不同的授权提供游戏图像。最著名的是开放游戏美术该网站拥有大量用户提交的内容,可以用于你的游戏中。另一个是免费的,不断增长的艺术收藏肯尼他是一位资产生产大师。
版权
请谨慎使用你没有创作过的作品。艺术品(包括音乐和音效)受许可和版权法的保护。一定要查看这些作品附带的许可。你肯定不想因为发行一款带有自己无权使用的资产的游戏而惹上法律麻烦。
当你第一次开始制作游戏时,使用已有的图像能够激发你的积极性。的事情立即当你无聊的“蓝色方块”变成一个酷,未来的半机械人鸡忍者。之类的。问题是,这种方法不能很好地扩展。鸡可能很棒,但当你想要添加一个水下关卡让鸡去探索时,你就需要寻找更多的资产。即使你找到了一些很棒的水下资产,它们也有自己的风格。随着你的游戏不断发展(游戏邦注:你将获得更多资源),事情将变得不那么一致。你将拥有漂亮的图像,但却很糟糕美学.
我保证,最终,你自己努力完成程序员美术(或者至少找到一个美工合作)会更有回报。任何未来的生化鸡忍者都是你自己的。
构建工具和工作流
我们将使用标准JavaScript编写游戏。要运行它们,您只需在web浏览器中加载游戏页面-在理论上.如果你是在“未来”(也就是说,在2018年之后的几年里,也就是我写这本书的时候)读这本书,它将是真的在实践中了。每个代码示例都有一个index-native.html
将在现代浏览器中运行的文件(您可能需要still服务页面,以便通过http://
而不是文件:/ /
.更多细节可在代码repo)。在撰写本文时,对一些新的JavaScript语言功能的支持还没有普及,所以我们需要设置一些工具来管理我们的游戏项目。
今天使用明天功能的解决方案是transpile我们将代码转换为一种适用于旧目标的形式。Transpiling这个词是什么意思将代码编译到相同的抽象级别(而不是到更低的级别,如C到汇编)。编译就像将源代码转换为源代码。我们将只能在现代浏览器中运行的源代码转换为可以在新旧浏览器中运行的源代码。
随着项目变得越来越复杂,将它们变成最终的、可运行的形式变得越来越困难。管理整个项目的工具被称为构建工具.他们构建将项目从源代码和资源转化为最终产品——编译和缩小文件,复制美术资产,剥离调试信息,在代码库中运行代码格式化验证工具,等等。尽管JavaScript和Web的一个可爱的方面是它不是必要的要使用任何构建工具,实际上你要么需要运行它们(例如,转译到旧的目标)或经常想要运行它们(简化游戏制作工作流程)。在JavaScript领域,这基本上意味着使用npm.
npm是JavaScript的一个通用包管理器,是Node.js生态系统的一部分。它是一组用于处理JavaScript包和项目的工具,也是一个巨大的他人代码库,您可以方便地将其放入自己的项目中!要安装生态系统,请访问nodejs.org并按照首页上的说明进行操作。macOS、Windows和Linux都有安装程序(和源代码)可用。
假设安装过程很顺利,没有痛苦(Node和npm的社区非常友好,如果你遇到困难),我们可以对npm进行测试。NPM通过一种特殊的方法来跟踪元信息(例如哪些文件属于特定的项目)package.json
位于根目录中的文件。您可以手动添加该文件,或者使用命令行工具生成一个文件npm init
(从在项目文件夹中):
npm初始化
NPM将用向导进行响应,要求您提供一些关于项目的必需和可选数据。完成后,它将创建package.json
使用您输入的元数据进行归档。现在,通过将第三方包和工具与其他包一起安装,可以将它们带入您的项目中npm
命令。例如,一个方便的包是小型web服务器(我们将在本书的所有示例中使用)武道.Budo是一个“快速原型开发服务器”。它提供了我们的游戏页面,就像在云端一样。它还有一些额外的很酷的功能,比如实时重新加载:每当你在代码中保存更改时,网页就会神奇地重新加载。要安装它,请使用npm安装
命令:
npm安装——save-dev武道
NPM install <包名>
是我们在项目中安装第三方包的方式。但请注意,我们还添加了标志——save-dev
.这表明武道只有在开发时才需要-也就是说,当我们的游戏完成,我们想要发布最终版本时,它不会被包括在内。为了运行Budo,我们将利用的另一个好处npm
-能够运行脚本来管理我们的项目流程在package.json
,找到脚本
对象并添加以下内容开始
命令:
“脚本”:{“开始”:"budo src/main.js:build.js——live"},
它指示Budo运行和加载src / main.js
文件。如果该文件包含任何其他文件,它也将加载它们—并将所有文件作为单个文件提供build.js
文件。
npm开始[0000]info http://192.168.1.161:9966/服务器(连接)[0000]info liverload正在运行[0000]35 1459 b女士(browserify)
打字npm开始
将执行该命令并在URL上提供我们的游戏。如果你导航到URL,游戏将加载!但实际上,它仍然指向模块src / main.js
-因为这是我们告诉它的index . html
.让它用我们的新build.js
文件中,更改脚本标记index . html
来< script src = " build.js " > < /脚本>
.这将获取捆绑的内容build.js
项目文件。
这本身并不是很有趣(尽管实时重新加载非常酷),但我们现在可以扩展Budo来使用像这样的功能巴别塔.Babel是JavaScript世界中的主要工具,用于将我们的代码转译为旧目标,允许我们使用新版本JavaScript语言的所有最新和最好的特性。
npm安装——save-dev babelify babel-core babel-preset-env
Babel是一个非常模块化的工具,它非常灵活,但也会让新用户感到难以置信的困惑。如果您安装上述三个包(babelify
,babel-core
,babel-preset-env
)你应该可以出发了。要使Babel为旧目标编译我们的代码,请修改开始
命令传递我们需要babelfication的标志:
Budo src/main.js:build.js——live——-t[babelify——预设[env]]
绕过武道
当你发行游戏时,你需要绕过Budo并使用该机制它用于在浏览器中运行代码:Browserify.不过,整个构建设置的事情越来越无聊,所以我就不详细介绍了。看看示例回购,看看我是如何做到这一点的,然后运行NPM运行构建
为了拯救build.js
文件到磁盘!
唷,好吧,是的。设置工具可能很麻烦,但一旦一切顺利运行,这些工具就变得非常宝贵。我们可以从其他人那里获取有用的库,并轻松地将其整合到我们的游戏中npm脚本
部分来自动化和简化我们的开发工作流,并且我们可以导出我们的自己的世界各地的其他人都可以使用的代码包。很酷。
版本控制系统
不管您的构建系统是什么(或缺少什么),您最终还需要掌握一个版本控制系统(VCS).一个风投公司跟踪代码库随时间的变化。当您对代码进行一些更改时,您将提交上面写着你所做的事。这听起来可能有点烦人,但它允许你回到项目历史中的任何点,并从那里运行你的游戏。这个功能绝对是你的救星,当你在凌晨3点在一个严格的截止日期之前做了一些突破性的更改,但却做不到的时候为了你的一生想想你做了什么破坏了它。它还使团队合作更加易于管理,因为您可以在相同的代码库上工作,并随时合并您的更改。
有很多可用的系统,但最受欢迎的是Git.它是由Linus Torvalds (Linux的创造者)创建的,作为分布式开发人员在Linux内核上工作的工具。它主要是一个命令行工具,但也有适用于所有平台的图形界面。现在,Git支持通常直接构建在代码编辑器中,因此您可以在不离开代码的情况下提交更改。
Git还催生了很棒的在线服务GitHub。GitHub提供一种简单的方法来存储和与世界共享您的版本控制代码。如果你刚刚开始学习,有很多可用的资源,比如读写GitHub初学者篇文章。
宝贵的时间
熟悉风险投资和各种构建工具是你在开发生涯中最好的投资之一。一旦你掌握了它们,你会想知道没有它们你是如何生存的。但是为了扮演魔鬼的拥护者,我还要指出,花时间学习项目工具就是花时间没有开发你的游戏.如果你以前从未制作过游戏,我不会告诉任何人你是否为了在屏幕上移动一些东西而推迟学习Git !
保持动力
在我们开始之前,你需要的最后一件事是动力。动力是驱使你完成工作的动力。也许你的动机只是钱——在App Store上创造一款爆款游戏,然后再也不用工作了。也许是名声——在游戏开发领域被公认为开发明星。也许是艺术——创造一些世界从未见过的东西,或者挑战社会的信仰。也许你只是想完成一款游戏。
因为我们都是不同的,我们还有很长的路要走,所以在这本书的整个过程中,我只想给大家一个共同的群体动机。这里…
邪恶的AAA游戏工作室集团,Exploitative Games, Inc.美国已经决定是时候摧毁独立游戏市场了,包括所有在这个市场上的开发者。这直接关系到你,因为你是一名专业的独立游戏开发者。你已经决定辞去你的日常工作(以一种惊人的方式:你可以从来没有去创建自己的游戏开发工作室,MomPop游戏.
在购置了一些联合办公空间、一台旧笔记本电脑和一些外卖咖啡之后,你来到了新生活的第一天。
一进入大厅,你就会遇到一个不祥的、穿着白色西装的人,你马上就认出他来了人变化的他是世界著名的Exploitative Games, Inc.(它恰好位于你办公室上面的34层)。他停顿了一下,怀疑地看了你一会儿。一位同事凑过来对他耳语了几句。最后,他含糊其辞地说:“别太安于环境。我计划成为独立游戏领域的王者,一劳永逸地除掉像你们这样的业余爱好者……MomPop游戏.”
他和他的随从拖着脚步走过,留下你盯着你的咖啡。
看来我们要进行一场友好的竞争了!我们最好现在就开始。
做好准备!
现在我们都有了适当的动机,开始吧。我们的任务很明确:我们需要学习如何创造令人惊叹的、迷人的、成功的电子游戏,而且我们需要快速学习。我们已经将项目设置好并准备好了。我们的工作流程已经到位。我们有工具,我们有人才。现在我们只需要一些好主意和一点点知识。
幸运的是,在短短几百页中,你将走出这里,拥有绝对的创作诀窍任何你可以想象这是一场愚蠢的游戏。