制作小游戏编程入门(游戏直装制作教程)

原文链接: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 描述为末日引擎(Doom engine)”,将id Tech 2描述为雷神锤引擎(Quake engine)”,等等。

Build这是90年代游戏引擎历史上的另一个例子。它由肯·西尔弗曼(Ken Silverman)旨在帮助定制第一人称射击游戏。与id Tech类似的情况,Build随着时间的推移,它的不同版本帮助程序员开发了《毁灭公爵3》D》(Duke Nukem 3D)、影子武士(Shadow Warrior)和《血祭》(Blood)等游戏。这三个可以说是用的Build引擎开发最受欢迎的游戏作品的代表通常被称为三巨头(The Big Three)”。

制作小游戏编程入门(游戏直装制作教程)

肯·由西尔弗曼开发Build引擎正在2D在模式下编辑关卡时的场景

20世纪90年代游戏引擎的另一个例子是疯狂建筑专用程序脚本创建开发工具(Script Creation Utility for Manic Mansion)”(SCUMM)。SCUMM是卢卡斯艺术公司(LucasArts)开发的引擎是许多经典的点击引擎(Point-and-Click)游戏的基础,猴岛小英雄(Monkey Island)和全速狂飙(Full Throttle)这两个游戏使用这个引擎。

制作小游戏编程入门(游戏直装制作教程)

游戏的对话框和操作全速狂飙SCUMM管理脚本语言

随着机器的发展和功能的不断增强,游戏引擎也在发展。现代引擎配备了快速处理器速度、惊人的内存和特殊显卡的功能工具。

有了备用动力,现代游戏引擎可以用机器循环换取更多的抽象。这种权衡意味着我们可以将现代游戏引擎视为通用工具,以更低的成本和更短的开发时间创建复杂的游戏。

为什么要制作游戏引擎?

这不是一个奇怪的问题,不同的游戏程序员也有自己的观点。答案取决于游戏的性质、业务需求和其他需要考虑的因素。

开发人员可以使用许多免费、强大和专业的商业引擎来创建和部署自己的游戏。那么,既然有这么多的游戏引擎可供选择,为什么有些人会从头开始制作游戏引擎呢?

我曾经写过一篇博客文章《自己写游戏引擎还是用现成?(https://pikuma.com/blog/why-make-a-game-engine)解释程序员从零开始制作游戏引擎的一些原因。在我看来,主要原因包括:

学习机会:对游戏引擎工作原理的深刻理解可以让你成为一名优秀的开发者。

工作流控制:您可以更好地控制游戏的特殊方面,并调整解决方案,以满足工作流的需要。

可根据独特的游戏需求定制解决方案。

极简主义:较小的代码库可以减少较大游戏引擎带来的费用。

创新:您可能需要为其他引擎实现一些新的或不支持的非正统硬件。

四、如何制作游戏引擎

下面将继续讨论游戏引擎的一些组件,并指导读者自己编写游戏引擎。

1.选择编程语言

编程语言是开发核心引擎代码的首选。原始汇编语言,C、C++,甚至C#、Java、Lua,还有JavaScript所有的高级语言都引擎。

最流行的语言之一是编写游戏引擎C++。C++编程语言使用面向对象的编程速度(OOP)结合其它编程范式的能力,帮助开发人员组织和设计大型软件项目。

性能通常在我们开发游戏时非常重要C++它具有编译语言的优点。使用编译语言意味着最终的可执行文件将在目标机器的处理器上运行。此外,还有许多特殊的C++大多数现代控制台都可以使用现代控制台,如PlayStation或XBox等。

制作小游戏编程入门(游戏直装制作教程)

开发者可以使用微软提供的C++库访问XBox控制器

就性能而言,我个人不推荐使用虚拟机、字节码或任何其他中间言。C++此外,一些适合编写核心游戏引擎代码的替代品还包括Rust、Odin和Zig等语言。

本文将以C++构建简单游戏引擎的编程语言。

2 . 硬件访问

在MS-DOS在旧的操作系统中,我们通常可以直接操作内存地址,并访问映射到不同硬件组件的特殊位置。例如,我想用某种颜色绘制一个像素,所要做的就是加载一个特殊的内存地址,其中数字代表VGA调色板的正确颜色,显示驱动程序将变化转换为物理像素,并将其转换为CRT显示器p>

随着操作系统的发展,它们开始负责保护硬件免受程序员的攻击。现代操作系统将不允许代码修改操作系统为进程提供允许地址之外的内存位置。

例如,如果你使用的是Windows、macOS、Linux或BSD,则需要向操作系统请求在屏幕上绘制像素或与任何其他硬件组件对话的正确权限。即使是在操作系统桌面上打开窗口这样的简单任务也必须通过操作系统API来执行。

因此,运行进程、打开窗口、在屏幕上渲染图形、绘制窗口内的像素,甚至从键盘读取输入事件都是特定于操作系统的任务。

SDL(Simple DirectMedia Layer,即简易直控媒体层)是一个非常流行的库,它可以帮助实现多平台硬件抽象。在游戏开发课堂上时,通过SDL,我无需为Windows操作系统、macOS和使用Linux系统的学生创建三个不同版本的代码。SDL不仅是不同操作系统的桥梁,也是不同CPU体系结构(英特尔、ARM、苹果M1等)的桥梁。SDL库对底层硬件访问进行抽象,并“翻译”我们的代码以便在这些不同的平台上都能够正确工作。

下面是使用SDL在操作系统上打开窗口的一小段代码。为了简单起见,代码中没有添加处理错误的部分,但是下面的代码对于Windows、macOS、Linux、BSD,甚至RaspberryPi,都是通用的。

制作小游戏编程入门(游戏直装制作教程)

SDL只是我们可以用来实现这种多平台硬件访问的游戏库的一个例子。SDL是2D游戏和将现有代码移植到不同平台和控制台的热门选择方案之一。多平台库的另一个流行选择方案是GLFW,它主要用于3D游戏和3D引擎。GLFW库可以很好地与OpenGL和Vulkan等加速3D API进行通信。

3 . 游戏主循环

至此,一旦操作系统方案解决,接下来我们就需要创建一个控制整个游戏的主循环。

简单地说,我们通常希望我们的游戏以每秒60帧的速度运行。根据游戏的不同,帧速率可能会有所不同,但为了让景物变得更加清晰,在胶片上拍摄的电影通常都是以每秒24帧的速度运行(每秒钟24幅图像从你眼前闪过)。

在游戏过程中,游戏循环会持续运行,在循环的每一次过程中,我们的引擎都需要运行一些重要的任务。传统的游戏循环必须确保:

在不阻塞的情况下处理输入事件

更新当前帧的所有游戏对象及其属性

在屏幕上渲染所有游戏对象和其他重要信息

制作小游戏编程入门(游戏直装制作教程)

但是,一个原始的C++循环对我们来说还不够。游戏循环必须与现实世界的时间有某种关系。毕竟,游戏中的敌人应该在任何机器上都是以相同的速度移动,而不管这些机器的CPU时钟速度如何。

控制这个帧速率并将其设置为固定的FPS数实际上是一个非常有趣的事情。它通常要求我们跟踪帧与帧之间的时差,并进行一些合理的计算,以确保我们的游戏以至少30 FPS的帧速率顺利运行。

4 . 输入事件处理

很难想象一个游戏不从用户那里读取某种输入事件会是什么情景。所有这些输入事件可能来自键盘、鼠标、游戏板或虚拟现实设备。因此,我们必须在游戏循环中处理不同的输入事件。

要处理用户输入,我们必须请求访问硬件事件,这必须通过操作系统API执行。我们可以使用一些著名的多平台硬件抽象库(SDL、GLFW、SFML等)来处理用户输入。

例如,如果我们使用SDL就可以实现轮询事件,然后仅用几行代码就可以处理各种输入事件。

制作小游戏编程入门(游戏直装制作教程)

再强调一次,如果我们使用像SDL这样的跨平台库来处理输入,我们不必太担心特定于操作系统的实现。无论我们的目标平台是什么,C++代码都应该是相同的。

至此,我们已经有了一个可工作的游戏循环和一种处理用户输入的方法。接下来是时候开始考虑在内存中组织游戏对象了。

5 . 在内存中表示游戏对象

在设计游戏引擎时,我们需要设计数据结构来存储和访问游戏对象。

程序员在设计游戏引擎时会使用多种技术。一些引擎可能会使用简单的面向对象方法来处理类和继承,而其他引擎可能会将它们的对象组织为实体和组件。

制作小游戏编程入门(游戏直装制作教程)

如想学习更多关于算法和数据结构的知识,建议尝试实现这些数据结构。如果你使用的是C++,一个选项是使用STL(标准模板库),并利用它附带的许多数据结构(向量、列表、队列、堆栈、映射、集合等)。C++STL在很大程度上依赖于模板,因此这是一个练习使用模板的好机会,同时可以在实际项目中看到它们发挥的作用。

在阅读过一些游戏引擎架构的内容后,你会发现游戏使用的最流行的设计模式之一是基于实体和组件。实体组件设计将游戏场景中的对象组织为实体(Unity引擎中称之为“游戏对象”,而Unreal引擎中则称之为“角色”)和组件(我们可以添加或附加到实体的数据)。

要了解实体和组件是如何协同工作的,请考虑一个简单的游戏场景。此例中,实体将是我们的主要游戏玩家,还包括敌人、地板、投射物等,而组件将是我们“附加”到实体上的重要数据块,如位置、速度、刚体碰撞器等。

制作小游戏编程入门(游戏直装制作教程)

一种流行的游戏引擎设计模式是将游戏元素组织为实体和组件

我们可以选择附加到实体的一些组件,例如下面这些:

位置组件:跟踪实体在世界坐标系中的x-y位置坐标(或3D中的x-y-z)。

速度组件:跟踪实体在x-y轴(或3D中的x-y-z)上移动的速度。

精灵组件:通常存储我们应该为特定实体渲染的PNG图像。

动画组件:跟踪实体的动画速度,以及动画帧如何随时间变化。

碰撞器组件:这通常与刚体的物理特性有关,并定义实体的碰撞形状(边界框、边界圆、网格碰撞器等)。

健康组件:存储实体的当前健康值。这通常只是一个数字,或者在某些情况下是一个百分比值(例如,健康进度条)。

脚本组件:有时我们可以在实体上附加一个脚本组件,它可能是一个外部脚本文件(Lua、Python等),我们的引擎必须在后台解释和执行该文件。

上面给出的是一种非常流行的表示游戏对象和重要游戏数据的方法。如今,我们已经有了实体,然后我们就可以将这些不同的组件“插入”到实体中。

目前,市场上已有诸多书籍和文章探讨了实现实体组件设计的方式,以及在这个实现中应该使用什么样的数据结构。我们使用的数据结构和访问它们的方式对我们的游戏性能有直接的影响。开发人员经常会提到诸如面向数据的设计、实体组件系统(ECS)、数据局部性等想法,这些想法与我们的游戏数据在内存中的存储方式以及有效访问数据方式都有密切的关系。

在内存中表示和访问游戏对象可能是一个复杂的主题。根据我的经验,你可以手动编写一个简单的实体组件来实现,也可以简单地使用现有的第三方ECS库(Entity-Component-System,即“实体-组件-系统”的缩写。此模式遵循组合优于继承原则,游戏内的每一个基本单元都是一个实体,每个实体又由一个或多个组件构成,每个组件仅仅包含代表其特性的数据)。

当前市场上,有一些流行的现成的ECS库可供选用,我们可以将它们包含在C++项目中,开始创建实体和附加组件,而不必担心它们是如何在后台实现的。C++ ECS库的一些例子是EnTT和Flecs。

我个人建议那些认真对待编程的学生至少尝试一次手动实现一个非常简单的ECS。我的理由是,即使你的实现并不完美,从头开始编写ECS系统也会迫使你考虑底层数据结构以及相应的性能。

一旦完成了定制的临时ECS实现,我建议你只使用一些流行的第三方ECS库(EnTT、Flecs等),因为这些都是经过行业多年开发和测试的专业的游戏开发库,它们可能比我们自己从零开始编写的要好得多。

总之,一个专业的ECS很难仅凭个人力量从零开始实现。选择一个经过良好测试的第三方ECS库,并将其添加到游戏引擎代码中即可完成你的游戏作品。

6 . 渲染

游戏引擎的复杂性正在慢慢提升。前文已讨论了在内存中存储和访问游戏对象的方法,接下来我们需要讨论如何在屏幕上渲染对象的问题。

第一步是考虑用引擎创建的游戏的性质。我们创建的游戏引擎是否只用来开发2D游戏?如果是这样,我们需要考虑渲染精灵、纹理、管理层,并可能利用图形卡加速。2D游戏通常比3D游戏简单,因为2D数学比3D数学要简单得多。

制作小游戏编程入门(游戏直装制作教程)

如果目标是开发2D引擎,则可以使用SDL帮助进行多平台渲染。SDL抽象了加速的GPU硬件,可以解码和显示PNG图像,绘制精灵,并在我们的游戏窗口中渲染纹理。

如果目标是开发一个3D引擎,那么则需要定义将一些额外的3D信息(顶点、纹理、着色器等)发送到GPU的方式。如果你想使用对图形硬件软件抽象,最流行的选择方案就是OpenGL、Direct3D、Vulkan和Metal。当然,使用哪种API的决定可能取决于自身的目标平台。例如,Direct3D会为微软平台的应用程序提供支持,而Metal则只适合与苹果的产品配合使用。

3D应用程序通过图形管道处理3D数据。该管道将规定引擎必须如何向GPU发送图形信息(顶点、纹理坐标、法线等)。图形API和管道还将规定我们应该如何编写可编程着色器来变换和修改3D场景的顶点和像素。

制作小游戏编程入门(游戏直装制作教程)

可编程着色器规定GPU应如何处理和显示3D对象

每个顶点和每个像素(片段)可以有不同的脚本,它们分别用于控制反射、平滑度、颜色、透明度等。

至于3D对象和顶点,最好将读取和解码不同网格格式的任务委托给一些第三方库来实现。大多数第三方3D引擎都应该了解许多流行的3D模型格式,例如OBJ、Collada、FBX和DAE等一些文件格式。我的建议是首选.OBJ文件格式,因为有不少测试和支持力度良好的库可以用C++处理OBJ加载。这方面,TinyOBJLoader和AssImp就是许多游戏引擎使用的上佳选择。

7 . 物理引擎

当我们向引擎中添加实体时,我们可能还希望它们在场景中移动、旋转和反弹。

游戏引擎的这个子系统称为物理模拟。这可以手动创建,也可以从现有的现成的物理引擎导入。

在这里,我们还需要考虑想要模拟的物理类型。2D物理通常比3D简单,但物理模拟的底层部分对2D和3D引擎都非常相似。

如果你只想在项目中包含一个物理库,那么已有几个很好的物理引擎可供选择。对于2D物理引擎,我建议调研一下Box2D和Chipmunk2D这两款产品。对于专业且稳定的三维物理模拟引擎,品牌相当不错的包括PhysX和Bullet之类的库。如果物理稳定性和开发速度对项目至关重要,那么使用第三方物理引擎总是一个不错的选择。

制作小游戏编程入门(游戏直装制作教程)

BOX2D是一个非常受欢迎的物理库选项,可以与游戏引擎一起使用

你不需要编写一个完美的物理模拟,但要确保物体能够正确加速,并且不同类型的力可以应用到你的游戏物体上。一旦实现基本的物体移动效果,接下来你也可以继续考虑实现一些简单的碰撞检测和碰撞解析。

对于2D刚体物理可参考Box2D源代码和来自Erin Catto的介绍。如果想寻找一门关于游戏物理的综合课程可参看《从零开始编写2D游戏物理》)。

如果想学习3D物理以及物理模拟实现,可参阅大卫·埃伯里(David Eberly)编写的图书《游戏物理》(Game Physics)。

8 . 用户界面设计

一提到Unity或Unreal等现代游戏引擎,我们会想到复杂的用户界面,其中包含许多面板、滑块、拖放选项和其他漂亮的UI元素,可以帮助用户自定义游戏场景。UI允许开发者添加和删除实体,动态更改组件值,并轻松修改游戏变量。

为了明确起见,我们讨论的是用于开发工具的游戏引擎UI,而不是我们向游戏用户显示的用户界面(如对话框屏幕和菜单)。

游戏引擎不一定需要嵌入编辑器,但由于游戏引擎通常用于提高生产力,友好的用户界面将帮助你和团队快速自定义游戏场景的关卡等其他方面。

对于初学者来说,从头开始开发UI框架可能是游戏引擎制作中最烦人的任务之一。你必须创建按钮、面板、对话框、滑块、单选按钮、管理颜色,还需要正确处理UI的事件并始终保持其状态。向引擎中添加UI工具会增加应用程序的复杂性,并给源代码管理带来大量麻烦。

如果你的目标是为引擎创建UI工具,那么我建议使用现有的第三方UI库,热门UI备选工具有Dear ImGui、Qt和Nuklear等。

制作小游戏编程入门(游戏直装制作教程)

Imgui是一个强大的UI库,被许多游戏引擎用作编辑工具

Dear ImGui是极佳的选择之一,它允许我们为引擎工具快速设置用户界面。ImGui项目使用了一种称为“即时模式UI”的设计模式,由于它通过利用加速的GPU渲染与3D应用程序进行良好的通信从而被广泛用于游戏引擎。

总之,如果你想在游戏引擎中添加UI工具,建议使用Dear ImGui。

9 . 脚本开发

随着我们游戏引擎的不断发展,一个常见的选择是使用简单的脚本语言实现游戏关卡定制。

想法很简单:我们在原生C++应用程序中嵌入了一种脚本语言,非专业程序员可以使用这种更简单的脚本语言编写实体行为、AI逻辑、动画和游戏的其他重要方面的脚本。

一些流行的游戏脚本语言有Lua、Wren、C#、Python和JavaScript等。所有这些语言的运行级别都比我们的原生C++代码高得多。无论谁使用脚本语言编写游戏行为脚本,都不需要担心内存管理或核心引擎如何工作的其他低级细节。他们要做的就是编写游戏中对应关卡的脚本,而我们的引擎知道如何解释脚本并在幕后执行艰难的任务。

制作小游戏编程入门(游戏直装制作教程)

Lua是一种快速、小型的脚本语言,可轻松与C/C++项目集成

我最喜欢的脚本语言是Lua。Lua体积小、速度快,非常容易与C和C++本机代码集成。此外,如果我使用Lua和“现代”C++,我喜欢使用一个名为Sol的包装库(https://github.com/ThePhD/sol2)。Sol库可帮助人们快速熟悉和使用Lua,并提供了许多辅助函数来改进传统的Lua C-API。

如果我们开发的游戏引擎中支持脚本编程的话,那么接下来可以开始在游戏引擎中讨论一些更高级的话题。脚本编程能够帮助定义人工智能逻辑、自定义动画帧和运动,以及其他不需要通过原生C++代码控制,而是可以通过外部脚本轻松管理的游戏行为。

10 . 音频

接下来,还有一个需要为游戏引擎添加的支持元素是音频。

如果想要读写音频数据并发出声音,我们需要通过操作系统访问音频设备。再次声明,由于人们通常不想编写特定于操作系统的代码,我建议使用一个多平台库来抽象音频硬件访问。

SDL等多平台库就具有扩展功能,可帮助引擎处理音乐和音效等内容。

但是,我强烈建议只有在确定引擎的其他部分都已经能够正常协同工作之后,再考虑处理音频的问题。控制声音文件发音可能很容易实现,但如果我们过早地开始处理音频同步问题,即把音频与动画、事件和其他游戏元素联系起来共同考虑,事情往往会变得一团糟。

如果你真正是自己手工编写代码,那么由于多线程管理的复杂性,可能会导致音频处理起来变得很棘手。不过,如果你的目标是编写一个简单的游戏引擎,那么我可能更会借助一个专门的库来处理这一部分功能。

例如,你可以考虑将SDL_Mixer、SoLoud和FMOD等优秀的音频库和工具集成到自己开发的游戏引擎中。

制作小游戏编程入门(游戏直装制作教程)

《微型战场》(Tiny Combat Arena)

这款游戏就使用FMOD声音库来实现多普勒和压缩等音频效果

11 . 人工智能

最后一个子系统是人工智能。我们可以通过脚本来实现人工智能。这意味着,我们可以将人工智能逻辑委托给关卡设计师来编写脚本。另一个选择是,在我们的游戏引擎内核的本机代码中嵌入适当的人工智能系统。

在游戏中,人工智能用于对游戏对象产生响应性、适应性或类似智能的行为。大多数人工智能逻辑被添加到非玩家角色(NPC、敌人)中,以模拟类似人类的智能。

敌人是AI在游戏中应用的一个流行的例子。当敌人追逐地图上的物体时,游戏引擎可以通过路径搜索算法或有趣的模仿人类的行为来创建抽象效果。

伊恩·米林顿(Ian Millington)的《游戏人工智能》是一本关于游戏人工智能理论和实现技术的综合性书籍,值得参考。

五、不要贪多求快

在游戏引擎开发工作中,最困难的部分之一是大多数开发者都不会设定明确的界限,即有一种走不到“终点线”的感觉。换句话说,程序员会启动一个游戏引擎项目,渲染对象,添加实体,添加组件,但到最后突然发现一切都很糟糕。因此,如果他们不定义某种边界,就很容易不断添加越来越多的功能,而忽略了全局。如果这种情况发生,游戏引擎很有可能永远看不到曙光。

除了缺乏边界,当看到代码以闪电般的速度在眼前增长时,我们自己反倒很容易被淹没。游戏引擎项目的复杂性可能会迅速扩大,几周内你的C++项目可能会有几个依赖项,需要复杂的构建系统,而随着更多功能添加到引擎中,代码的整体可读性会不断下降。

制作小游戏编程入门(游戏直装制作教程)

因此,我的首要建议是,在编写实际游戏时,要始终坚持编写自己的游戏引擎。开始并完成游戏的第一次迭代时,脑海中要有一个真实的游戏。这将帮助你设定限制,并为你需要完成的工作指出一条清晰的路径。尽最大的努力坚持下去,而不是反复改变需求。

六、稳扎稳打,专注基础

大多数学生在项目开始时都感到兴奋,但是随着时间的推移就开始出现焦虑情绪。如果我们从头开始创建一个游戏引擎,尤其是在使用像C++这样的复杂语言时,很容易不知所措失去动力。

因此,要学会及时享受某些阶段性的小胜利。例如,学会如何成功地在屏幕上显示PNG纹理,成功地发现了两个物体之间的碰撞等等。专注并理解基础知识一直都是非常重要的事情。

对于热爱编程的朋友来说,路再难走也要坚持走下去!如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

制作小游戏编程入门(游戏直装制作教程)

编程学习视频分享:

制作小游戏编程入门(游戏直装制作教程)

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至827202335@qq.com 举报,一经查实,本站将立刻删除。文章链接:https://www.eztwang.com/dongtai/50813.html

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2022年12月24日 14:07
下一篇 2022年12月24日

相关推荐

  • 找手工活在哪个平台上找比较真实可靠(外发加工接单平台)

    关于手工活代加工你知道多少?前两天跟一个朋友聊天,他跟我聊起来这个话题,我对这方面不懂,然后就听他给我讲。 大概去年三月份时候,他在1688上面找了一个手工活代加工的,当时说的很好很好,还给他看了他们的营业执照和签订合同,想着营业执照什么都看了应该没什么事。当时他就激情澎湃了,脑子一热当时就让他们发了第一批货。 第一批货到了,是需要快递到付,付了四百多块,是…

    2024年3月25日
    2000
  • 拼多多开店要钱吗(网上开店铺需要什么流程)

    拼多多作为中国的电商平台之一,吸引了越来越多的商家入驻。本文将详细介绍在拼多多开店的流程以及所需的费用。 一、拼多多开店流程1. 注册账号首先需要在拼多多官网上注册一个账号,填写正确的手机号码,并设置密码。平台会通过短信验证码的方式验证手机号是否正确,并完成账号的注册。2. 完善店铺信息在注册账号后,需要填写店铺的基本信息,包括店铺名称、店铺LOGO、经营类…

    2024年3月24日
    1100
  • 兼职拿我身份证开淘宝网店(别人拿我的身份证开网店)

    遥想当年,电商刚开始发力的阶段,身边经常有人借身份证开淘宝店铺。究其原因,主要就是平台规定一人一店,所以为了多开店铺提高成功率,“七大姨八大姑”借了个遍,甚至村里的留守老人都不放过。时至今日,还不乏这样的人存在。 再说几年前,不少之前的电商创业者成了大老板,事业飞黄腾达,开了公司,买了奔驰。虽然小日子越过越滋润,但也遇到烦心事。 “啥事呢”? “不能大声说的…

    2024年3月24日
    1500
  • 闲鱼一键转卖怎么赚钱(闲鱼的一键转卖是赚佣金吗)

    “现在去闲鱼上买东西,刷好几屏都是职业卖家,真正卖闲置物品的个人越来越少了。”有网友吐槽。 知乎、百度等平台上也充斥着闲鱼赚钱攻略:“去1688、拼多多、义乌购、微商手里找货源找文案,自己不要的东西,低于均价快速卖出刷好评,提升闲鱼账号的成交量,带动流量和活跃度,权重也会变高。” 就像闲鱼的Slogan所说的,闲鱼本身是一个“卖闲置,淘二手”的平台,因其只需…

    2024年3月24日
    2100
  • 不小心把收款码发给别人了怎么办(如何重置微信收款二维码)

    众所周知,微信付款二维码不能随便发给人。但是,收款二维码能不能随便发给别人呢,会不会存在什么风险呢?事实上,还是存在一定风险的。下面简单分析一下: 1、财务风险 我们都知道,收款码是我们向别人收钱的二维码。如果发给别人,别人扫码了,我们也只是进账资金,财务上不可能会造成损失,反而是赚了钱。但是,如果正当的钱,我们可以收。如果进账的是不正当的钱,那就会给自己带…

    2024年3月24日
    1.1K00
  • 闲鱼到付安全吗(闲鱼卖家顺丰到付对谁有利)

    贩卖二手商品,可以直接把家中闲置物品换成真金白银,把不常用的、或者根本不用的东西变卖后,购入更加常用、更加心仪的产品。对比在各大电子平台开店售卖的方式,二手交易平台是更加合理的选择。 闲鱼平台是小编用着最好的闲置物品贩卖平台,下面我所教的基本内容也是适合个人“开店”的方法。此文为经验交流,并不是教授论文,希望各位看官摆平姿态,吸收干货。 第一,取得开门红。 …

    2024年3月24日
    1100
  • 1688开店铺需要多少钱(入驻1688一年要多少钱)

    阿里巴巴国际站-重庆 阿里巴巴国际站有22年的建站历史,目前已经成为全球最大的做外贸B2B(批发)网站,主要招商对象是中国商家,买家分布在200多个海外国家和地区。国际站俗称“1688海外版/英文版”,其实国际站除了有1688相似的找批发买家流量提供之外,还提供了出口、报关退税、出口物流,还有现如今最受关注的收外汇等多项国际贸易辅助业务。 先来说说入驻费用:…

    2024年3月24日
    1000
  • 抖音商城怎么开店(怎样在抖音上开店铺卖商品)

    抖音上怎么开店,目前在抖音很多用户都在推销自己的视频时候,都附带了很多商店的连接,其中的流量可想而知,对于很多刷抖音的人来说这里是最好的推销地方,那么如何在抖音上开店呢?开店铺需要什么条件?下面就跟小编一起来看看抖音开店教程步骤! 抖音开店教程步骤 1.首先你要有自己的抖音号,注册一个并且登录,在“我”这个页面右上角有三条整齐的横线“三”点开,底下有个“设置…

    2024年3月24日
    800
  • 淘宝中评对卖家的影响(淘宝中评多久显示)

    淘宝的评价系统规定只有在商家购买了商品之后才能对其进行评价,一般来说,买家购买的商品只要不和商家描述的有太大出入的话,那么买家是不会恶意给中评的,除了恶评师。店铺很可能会因为顾客的一个差评或者一个中评而对店铺的权重产生影响,从而使店铺的销量下降和声誉受损。那么一个淘宝店铺被给于中评,会对其产生什么影响?以下是关于淘宝的评价系统的介绍。 一、淘宝店被中评有啥影…

    2024年3月24日
    1500
  • 女生学美甲赚钱吗(女孩子做美甲行业好吗)

    有很多人问我当美甲师一个月能挣多少钱?我告诉你挣不了多少钱。很多女孩喜欢去做美甲,美甲师看似很挣钱,不过挣的也是辛苦钱。美甲师的月收入一般有两种:一种是有底薪的,一种是底薪加提成。在一般城市的美甲师底薪不超过3000,另一种底薪不高,一般提成在20%-30%左右,是一项多劳多得的技术。 美甲师的工资还和很多因素有关: ·1.所在地消费水平不同。消费水平高的城…

    2024年3月23日
    2800
  • 速卖通是b2c还是c2c(速卖通跨境电商)

    今天,我们将探索的是“速卖通”——被誉为“国际版淘宝”的跨境电商平台! 速卖通作为阿里巴巴旗下的跨境电商平台,在中国,它是最大的跨境出口B2C平台之一。同时,速卖通也在俄罗斯、西班牙等国家排名榜首,站点覆盖超过200个国家,广受欢迎。 平台费用与平台物流 速卖通的费用模式相对灵活,只需要支付佣金,佣金范围为3%到8%,并且享有无月租费优势。收款方面,买家确认…

    2024年3月23日
    800
  • 一般什么地方招暑假工(暑假临时工招聘网)

    马上就要放暑假了,各位大学生们的暑假工作是不是找好了呢。还没有找到的小伙伴们不要着急,我们现在就来分享一下2022网上找暑假工比较靠谱的软件。看看有没有让你心仪的那一款呢?可以根据以下平台来选择,比较可靠真实: 1. BOSS直聘、58同城、赶集网、智联招聘、前程无忧51Job、拉勾招聘等平台都有海量的优质岗位,可以根据自己的需求选择合适的平台。 2. 探儿…

    2024年3月23日
    600
  • 美甲店一天能挣1000吗(开美甲店会亏钱吗)

    我是一家个人美甲店,每天能赚多少钱呢? 我是一家个人美甲店,位于谷埠街国际商城。今天的收入达到了1200元,其中包括两个指甲的美甲服务、一个美睫和一个眉毛。 ·第一位顾客是通过抖音视频找到我的,她看到我们家有特色的建构养甲项目,毫不犹豫地选择了纯色加建构的服务,价格为49.9元。 ·第二位顾客是我的老顾客,一直对我的技术非常认可。上个月她在我这里做了一个不开…

    2024年3月23日
    1000
  • 开网店卖什么东西好赚钱(网店初学者适合卖什么)

    开网店卖小饰品是一种越来越受欢迎的创业方式。随着人们对个性化产品和定制化服务的需求不断增加,小饰品作为一种简单易行、价格亲民的商品形式,具有很大的市场潜力。 虽然开网店卖小饰品是一种相对容易入门的创业方式,但是赚钱并不是轻松的事情。首先,您需要有一个新颖独特的产品系列,以吸引消费者的吸意力;其次,您需要掌握一些基本的营销技巧,例如拍摄高质量的产品图片,并在社…

    2024年3月23日
    500
  • 电商怎么发货才便宜(拼多多无货源在哪里找货源)

    如今快节奏的生活环境下,人们对于生活质量的要求和物质享受的追求也是逐步的提高,单单的吃饱穿暖已经不太符合如今的生活的追求。 创业项目,副业项目,现在已经成为了年轻人们的新选择,尤其是目前互联网创业前景广阔,正适合年轻人大展拳脚。 但同样,经常有人会说十个创业九个死,虽然机会多,但竞争也更大,在潮流中倒下的创业者同样是一波接着一波。 随着拼多多的快速崛起和发展…

    2024年3月23日
    800
  • 初中学历的宝妈适合考什么证(四十多岁还能考什么证)

    初中学历可以考多种证书,以下是一些可供参考的证书类型: 会计从业资格证:初中以上学历,年满18周岁即可报名。 电工操作资格证(上岗证):年满18周岁且符合相关工种规定的年龄要求,经医院体检合格且无妨碍从事相应特种作业的疾病和生理缺陷,初中及以上学历,符合相应特种作业需要的其他条件。 计算机等级证书:考生不受年龄、职业、学历等背景的限制,均可根据自己学习情况和…

    2024年3月23日
    700
  • 什么工作可以在手机上做(手机上的兼职有哪些)

    1.网上问卷调查 网上问卷调查是一个简单的赚钱方法,只需要你花费一些时间填写一些调查问卷,就可以获得一些报酬。一些市场调研公司和在线调查平台,经常需要人们填写一些问卷来帮助他们更好地了解市场和消费者需求。你可以去一些问卷调查网站注册,填写一些问卷调查,一般每份问卷的报酬是2-5元不等,根据问卷的难度不同而有所区别。如果你愿意花费更多时间填写问卷,你可以得到更…

    2024年3月23日
    2000
  • 1688一件代发利润大概在多少(免费一件代发正规平台)

    肯定能啊!不然不赚钱为啥有这么多人去做! 但是也不是说你做了就能赚钱,就跟做生意一个道理,能不能赚钱看的是个人能力! 但是相对来说,一件代发是非常简单的了,机会也比较大,投入和产出的回报比也比较高! 至于题主说的一些费用,很多都没有必要,如果想尝试我建议的是以最小的投资来做。 先简单说说一件代发: “一件代发”顾名思义,就是你作为卖家,哪怕你只卖出一件产品,…

    2024年3月21日
    900
  • 暑假工干什么比较好(暑假工一般找什么工作)

    给你几点建议,希望能帮到你。 01 如果你去电子厂或者机械厂打工,要防止招你的人是不是中介,干多久可以离职,根据我的经验,一般厂里是干三个月才能走,如果你干两个月,到最后离开会很困难,可能到时候干了中介会不断拖你工资。 另外还有一点要注意,在一些APP上找工作,一般招聘者都是中介公司。当你面试之后,不可能马上入职。 就例如我和我同学在58同城找工作去了之后才…

    2024年3月21日
    1100
  • 品牌折扣店的货是真是假(折扣店的东西为什么便宜)

    你在网上看到那些价格很便宜的品牌折扣网站,比如唯品会,会不会想:“这么便宜,质量能保证吗?”今儿我们就讲讲,他们怎么做到比传统的零售商卖的便宜,还是真货。大概四个原因。 第一、品牌折扣平台一般卖的都是品牌的过季产品或者库存产品,品牌商需要清理库存,愿意以很低的价格把产品出掉。 第二,品牌折扣品牌所在的品类一般都是服装和家居产品,这类产品的定价策略一般都是按照…

    2024年3月21日
    700

发表回复

登录后才能评论

联系我们

18312384410

在线咨询: QQ交谈

邮件:827202335@qq.com

添加微信