游戏编程基础 硬件编程语言 API

2025-05-24

游戏编程基础

硬件

编程语言

蜜蜂

如果您正在寻找“如何开发游戏”这个问题的答案,让我们一起思考。首先,我们不会讨论编写游戏是否需要学习软件语言或游戏引擎。事实上,游戏行业是一个涵盖许多不同领域的领域,例如数学、艺术、心理学甚至电影。换句话说,仅仅掌握游戏引擎和软件语言是远远不够的。那么我们需要了解什么呢?让我们一起来看看。

游戏机制

如今,游戏吸引大量玩家的最大原因之一是游戏机制。为了更好地理解游戏机制,我们必须思考一个系统。这个系统控制着各种子系统。为了更好地理解这一点,你可以查看下面的图表。

游戏机制

系统

如上图所示,系统承担以下任务:

  • 运行加载和保存部分来加载文件。
  • 然后,它使用音频和图形部分来运行介绍动画。
  • 在使用游戏界面的过程中,用户输入可确保图形和声音部分协调工作。
  • 最后,它确保图形、声音、用户输入、人工智能和网络部分在游戏中协调工作。

资源

资源描述了硬盘上游戏所需的必要文件。

  • 这些文件包含描述游戏默认运行配置的配置文件。
  • 如果可用,它包含游戏首次启动时播放的介绍视频文件。
  • 包含用户在游戏前获取有关游戏的信息的文件。
  • 它包含游戏中的图形、音乐和章节信息的文件。

游戏模型

  • 是游戏图形、音乐和文本文件从内存中的资源加载到内存中的状态。
  • 图像文件存储在内存中或者显卡的纹理内存中。
  • 部分、分数等信息保存在变量和数据结构中。

上传并保存

这部分是从源头获取图形、音乐和其他信息并将其放入内存(游戏模型)的粒子,并在出现新的得分情况或记录游戏时将其保存回源头。

上传:配置文件、章节文件、图像文件、音乐和声音文件、3D模型文件、视频文件、帮助文件。

保存:比赛期间需要保存的分数文件和其他文件

图形

在我看来,这是游戏中最重要也是最难的部分。因为没有视觉效果,游戏就不可能存在。这部分负责绘制屏幕。

  • 播放视频
  • 显示游戏界面
  • 查看分数、帮助和配置信息
  • 显示游戏自身的图形

用户输入

没有互动的游戏就像电影一样。用户互动无疑是游戏机制中连接用户与游戏的必要条件之一。系统需要与用户持续互动。键盘、鼠标等等,这些都是我们要用到的设备。

  • 使用游戏界面
  • 查看帮助文件
  • 审阅乐谱文件
  • 配置(系统和游戏相关)
  • 控制游戏中的用户角色

声音和音乐

如果你想理解声音和音乐的重要性,请在玩游戏时关闭声音。你会发现,当没有声音时,游戏的价值会下降。我们可以说,声音的价值与游戏的画面一样宝贵。

  • 背景音乐正在播放
  • 碰撞和运动的音效

人工智能(AI)

让我们来思考一下游戏中敌人的智力水平。它们看起来越像人类,行为就越智能,游戏就越有趣。这不仅仅是敌人。在开放世界游戏中,路过的市民会看手表,在阳光明媚的天气里擦汗,会给你让路,甚至会和你争吵,会在你虐待动物时攻击你等等。所有这些都可以归入人工智能的范畴。

网络监听和发送

这部分是允许多人一起玩游戏的部分,在这个部分中,双方向游戏服务器发送信息,并通过监听服务器收到的信息在游戏中进行更新。

建立会话:参与游戏的玩家首先同意使用哪种协议和哪个端口进行通信。

数据包传输:游戏中的移动会以数据包的形式发送到服务器。服务器进行必要的修改后,再分发给所有参与方。

包裹领取:同时双方通过监听服务器得知变更,并反映到游戏中。

硬件

电脑游戏爱好者总是渴望拥有更出色的画面、音乐、物理效果以及更强大的人工智能。要实现这一切,必须满足以下两个条件之一。

  • 应该进行软件优化,找到新的算法,
  • 应采用合适的设备并提高处理速度。

如今,新算法和代码优化的进展远慢于硬件发展的速度。如今,软件不再关注新算法,而是关注可重用性、代码开放性、代码安全性(封装性)等问题。而硬件则试图尽可能提高处理器速度和内存容量以满足这些新需求。

在本节中,我们可以讨论许多不同的硬件,例如:

  • 显卡,
  • 处理器,
  • 母板,
  • 声卡,
  • 显示器、扬声器和新的输入设备等……

编程语言

编程语言是一种计算机语言,它提供了以特定标准形式开发命令和软件的机会。借助编程语言,我们可以控制计算机在何种情况下能够输出何种类型的结果。简而言之,借助编程语言,计算机和人类可以进行高效的沟通。

由于我们的主题是游戏开发,我们将重点关注这个主题。根据你的目标和创作内容,你可以使用所有编程语言来开发游戏。有些人会坚持要求你学习 C++。这绝对不是事实。你可以使用 JavaScript、C#、Python 甚至 C 语言来制作出色的游戏。一款仅在主机屏幕上运行的选择式冒险游戏也可能很棒。但如果你想制作更专业、更吸引人的游戏,请继续阅读。

C++

C++ 是一门高级语言,可以教授面向对象编程的基础知识,因此学习它是个不错的选择。它也是用于开发控制台游戏和 Windows 游戏的语言。此外,它使用 OpenGL 或类似的框架(如果您继续阅读本指南,我将详细讲解 OpenGL)。

C++ 是一种快速编译的编程语言。在内存管理方面,你也拥有很大的自主权。它拥有丰富的库,可用于设计和驱动复杂的图形处理。由于 C++ 几十年来一直是程序员的首选语言,因此有很多文献可供你提升技能,而且你会发现在线社区随时准备解答你的问题。

如果我们说 C++ 容易学习,那绝对是谎言。与其他编程语言相比,C++ 确实很难学。但它之所以有用,不仅因为 C++ 游戏易于在各种平台上发行,还因为如果你懂 C++,就能快速学习 C# 和其他面向对象语言。C++ 和 C# 只是当今最活跃的编程语言中的两种。

总而言之,如果您想从头开始创建游戏,学习 C++ 是一个不错的选择。

C♯

C# 的优势在于 XNA 框架。这是微软提供的一套工具和工作区,特别适合 Xbox 或 Windows 平台上的游戏。

如果比较 C++ 和 C#,你可能会想到这个例子。C++ 就像一辆手动挡汽车,而 C# 就像一辆自动挡汽车。让我们以 Unity 游戏引擎为例。如果使用 Unity 游戏引擎,你必须用 C# 编写脚本。然而,这款游戏引擎的核心是 C++ 代码。

你的目标平台、你想制作的游戏、你将使用的游戏引擎等等因素都会影响你对语言的选择。不过,学习 C# 确实是一个好主意。

Java

游戏程序员经常使用 Java,因为 Java 支持多线程和套接字。多线程占用更少的内存,并充分利用可用的 CPU,而不会在后台运行密集进程时阻塞用户。套接字有助于创建多人游戏。此外,Java 在虚拟机中运行,因此游戏更易于部署。

此外,如果您想为 Android 平台开发应用程序和游戏,Java 将是一个不错的选择。

JavaScript

制作浏览器游戏与制作主机游戏截然不同。如果您需要 3D 图形或复杂的图形以及内容管理系统,那么您还需要 SVG 或 WebGL。

使用编程语言 ActionScript 的 Flash 动画在过去是浏览器游戏中常见的,但 Flash 已经过时了。

麻省理工学院开发的支持 WebGL 的 Java 引擎(例如PlayCanvas)允许用户同时使用在线浏览器进行游戏并发布到多个平台。

此外,还有很多优秀的游戏引擎可以使用 JavaScript。例如,PhaserJS就是其中之一。

蜜蜂

API 是什么?它代表应用程序编程接口 (API)。它们是一些库,通过提供一系列函数来帮助我们执行特定任务。

我们将在游戏中使用的 API 将是库,通过提供图形和声音硬件的接口,使我们能够充分利用这些 API。例如 OpenGL、GLUT、GLU、DirectX(Direct3D、DirectDraw、DirectShow、DirectInput、DirectPlayer、DirectSound、DirectMusic)、Java2D、Java3D、JavaMusic、JavaNET、JavaMedia、FMOD 等等……

我觉得学习OpenGL库会很有用。所以,我们来简单聊聊OpenGL吧。

OpenGL

OpenGL 驻留在图形硬件上,并提供与该硬件的接口。该接口包含 250 个不同的指令集。其中 200 个位于 OpenGL 核心中,另外 50 个位于 OpenGL 实用程序库中。借助 OpenGL 图形 API,您可以开发 3D 交互式应用程序。

OpenGL 是一个独立于平台的 API。它被设计为一个执行连续运行命令流的接口。为了确保其质量,它不包含诸如窗口任务和获取用户输入之类的命令,而是受益于其所使用平台为 OpenGL 提供的窗口和输入服务。同样,它不包含用于创建高级 3D 对象的命令。但使用其提供的命令,它可以创建汽车、平面或分子表面。为了使用 OpenGL 创建此类所需的模型,我们利用了我们称之为几何图元的小工具包中的点、线和多边形。

当然,更好的图形系统可以建立在OpenGL的核心结构之上。OpenGL实用库(GLU)拥有许多高级建模功能,包括二次曲面、NURBS曲线和曲面渲染。

渲染期间执行哪些操作?

通过下面的4个阶段,可以简单了解一下渲染过程中都发生了哪些过程。

  • 用数学表达式创建形状和几何对象(OpenGL 具有创建点、线、多边形、图像、位图等原始对象的工具)
  • 三维平面内物体的排列及透视的调整
  • 计算物体的颜色值,并结合光线和纹理值将其应用到屏幕上
  • 所有对象值的定义及颜色值到像素值的转换,简单来说就是光栅化事件的实现。

一个简单的 OpenGL 代码示例

OpenGL 图形系统包含如此多的选项和复杂的操作,这无疑会让 OpenGL 变得复杂。但本质上,用 OpenGL 编写的程序结构非常简单。你实际上要做的就是定义某些状态,并设置一个控制机制,决定 OpenGL 应该渲染哪些对象以及如何渲染。

实际上,你可以将 OpenGL 视为一个实时渲染软件。在介绍这个编程概念之前,我们先来理解一些术语。

main(){
       initializeAwindowPlease( );
             glClearColor(0.0, 0.0, 0.0, 0.0);
             glClear(GL_COLOR_BUFFER_BIT)
             glColor3f(1.0, 1.0, 1.0);
             glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0)
             glBegin(GL_POLYGON)
                    glVertex3f(0.25, 0.25, 0.0)
                    glVertex3f(0.75, 0.25, 0.0)
                    glVertex3f(0.75, 0.75, 0.0)
                    glVertex3f(0.25, 0.75, 0.0)
             glEnd( );
             glFlush( )
             UpdateTheWindowAndCheckForEvents( );
Enter fullscreen mode Exit fullscreen mode

概括

首先,非常感谢各位看到这里。我们这篇文章的结论应该是:

游戏开发不仅仅是学习编程语言和游戏引擎。

你必须掌握很多技术。我们之前没有提到的技术包括 Adob​​e Premier、Adobe After Effects、3D Studio Max、Lightwave、Maya 和 Poser 等程序。学习和掌握这些技术只有通过经验才能实现。

这就是我们讨论硬件和 OpenGL 的原因。热爱你的电脑和键盘,而不是专注于一件事。掌握游戏开发的最佳且唯一的经验法则是:

保持好奇心,多读书,无所畏惧地去尝试。

文章来源:https://dev.to/fkkarakurt/game-programming-fundamentals-5cil
PREV
如何用 React、Tailwind 和 Framer-motion 复制 Zelda BOTW 界面:第一部分 为什么要这样做?关于这个界面 关于格式 Zelda BOTW 入门 从布局开始 添加项目网格 项目选择 键盘导航 动画 下一步是什么
NEXT
11 个免费且有趣的 API,你必须在你的业余项目中使用