适合初学者的5款游戏引擎:如何从零开始用 C 开发一款游戏引擎
适合初学者的5款游戏引擎:如何从零开始用 C 开发一款游戏引擎为了真正理解这些API是如何工作的,让我们更具体地结合应用说明一下。例如,游戏引擎API公开一个名为“IsColliding()”的函数,开发者可以调用该函数来检查两个游戏对象是否发生碰撞,这种情况并不罕见。程序员不需要知道该函数是如何实现的,也不需要知道正确确定两个形状是否重叠所需的算法。就我们而言,IsColliding函数仅是一个黑匣子,根据这些对象是否相互碰撞,它会正确地返回true或false。下面是大多数游戏引擎向用户公开的一个功能示例。游戏引擎和游戏框架通常向用户公开一组API。这些API允许程序员调用引擎函数,并像执行黑匣子一样执行艰难的任务。本文将详细介绍使用C 创建一款简单游戏引擎所需的一些基本构建模块,解释游戏引擎所需的主要组成元素,并就如何从零开始编写游戏引擎给出一些个人建议。不过,本文不是一个编程教程,因此也不会深入太多的技术细节或解释所有这些元素是如何通过代码
原文链接:https://hackernoon.com/build-a-game-engine-from-scratch-in-c
游戏开发一直很能激励学生学习高级计算机科学。可能有些人认为游戏是孩子们喜欢的,但对于标准的计算机科学课程来说,游戏开发其实是少数几个能用当中所有知识的领域。
游戏开发涉及标准计算机科学课程中的诸多内容
根据游戏的性质,你可能还需要深入到更具体的专业,比如分布式系统或人机交互。游戏开发是一项严肃的工作,是助力计算机科学理念学习的有力工具。
本文将详细介绍使用C 创建一款简单游戏引擎所需的一些基本构建模块,解释游戏引擎所需的主要组成元素,并就如何从零开始编写游戏引擎给出一些个人建议。
不过,本文不是一个编程教程,因此也不会深入太多的技术细节或解释所有这些元素是如何通过代码粘合在一起的。如果你想找关于如何编写C 游戏引擎的综合性教程,可以先看看《用C 和Lua创建一个2D游戏引擎》。
一、游戏引擎是什么?概括地讲,游戏引擎是一套优化视频游戏开发的软件工具。这些引擎可以是小而极简型的,简单到只提供一个游戏循环和几个渲染功能;当然,也可以是大而全面型的,类似于IDE应用程序那种,开发人员可以用于编写脚本、调试、自定义关卡逻辑、人工智能、设计、发布、协作,并最终从头到尾构建游戏,而无需离开引擎。
游戏引擎和游戏框架通常向用户公开一组API。这些API允许程序员调用引擎函数,并像执行黑匣子一样执行艰难的任务。
为了真正理解这些API是如何工作的,让我们更具体地结合应用说明一下。例如,游戏引擎API公开一个名为“IsColliding()”的函数,开发者可以调用该函数来检查两个游戏对象是否发生碰撞,这种情况并不罕见。程序员不需要知道该函数是如何实现的,也不需要知道正确确定两个形状是否重叠所需的算法。就我们而言,IsColliding函数仅是一个黑匣子,根据这些对象是否相互碰撞,它会正确地返回true或false。下面是大多数游戏引擎向用户公开的一个功能示例。
大多数引擎都会抽象碰撞检测,并简单地将其作为真/假函数公开
除了编程API,游戏引擎的另一个重要职责是硬件抽象。例如,3D引擎通常构建在一个专用的图形API上,比如OpenGL、Vulkan或Direct3D。这些API为图形处理单元(GPU)提供了软件抽象。
说到硬件抽象,还有一些底层库(如DirectX、OpenAL和SDL),它们提供对许多其他硬件元素的抽象以及多平台访问。这些库帮助我们访问和处理键盘事件、鼠标移动、网络连接,甚至音频等各项功能。
二、游戏引擎的崛起在游戏行业的早期,游戏是使用定制的渲染引擎构建的。开发代码是为了从较慢的机器中尽可能多地提升部分系统性能。每个CPU周期都至关重要,因此代码重用或适用于多种场景的通用函数并不是开发人员能够负担得起的。
随着游戏和开发团队规模和复杂性扩展,大多数工作室最终都会在开发的多款游戏之间重用某些功能和子程序。工作室开发的内部引擎,基本上都是针对处理低级任务的内部文件和库的集合。这些功能允许开发团队的其他成员专注于游戏操作、地图创建和级别定制等高级细节。
一些流行的经典引擎包括id-Tech、BUIld和AGI等。这些引擎是为了帮助特定游戏的开发而创建的,它们允许团队的其他成员快速开发新的关卡,添加自定义资源,并动态定制地图。这些定制引擎也被用来为他们的原创游戏修改或创建扩展包。
Id Software软件公司(美国得克萨斯州的一家游戏软件公司)研发了id Tech技术。id Tech技术其实是一系列不同引擎的集合,其中每一个引擎的迭代时期都关联着一款不同的游戏。于是,开发人员通常会将id Tech 0描述为“Wolfenstein 3D引擎(Wolfenstein3D engine)”,将id Tech 1描述为“末日引擎(Doom engine)”,将id Tech 2描述为“雷神之锤引擎(Quake engine)”,等等。
Build是上世纪90年代游戏引擎历史中的另一个例子。它由肯·西尔弗曼(Ken Silverman)创建,旨在助力第一人称射击游戏定制。与id Tech的情况类似,Build随着时间而发展,它的不同版本曾经先后帮助程序员开发了《毁灭公爵3D》(Duke Nukem 3D)、《影子武士》(Shadow Warrior)和《血祭》(Blood)等游戏。这三个可以说是使用Build引擎开发的最受欢迎的游戏作品的代表,通常被称为“三巨头(The Big Three)”。
肯·西尔弗曼开发的Build引擎正在2D模式下编辑关卡时的情景
上世纪90年代游戏引擎的另一个例子是“疯狂大楼专用程序脚本创建开发工具(Script Creation Utility for Manic Mansion)”(SCUMM)。SCUMM是卢卡斯艺术公司(LucasArts)开发的一款引擎,它是许多经典点击式(Point-and-Click)游戏的基础,《猴岛小英雄》(Monkey Island)和《全速狂飙》(Full Throttle)这两款游戏就使用这个引擎。