游戏开发的基础是什么?[关闭]


12

我完全不了解如何编码视频游戏。

我是一名初学者程序员,只有编写可进行数学运算或不进行数学运算的控制台应用程序的经验。我不了解这些逻辑过程如何使图像在屏幕上移动(视频游戏)。显然,如果我跳入游戏开发书或类似的书中,我会理解的,但目前我仍然对编程的基本知识有所了解。在使计算机做简单的数学运算与使计算机产生令人惊叹的图形程序(例如视频游戏)之间的过渡中,有人能给出一个简单的解释,并进行明智的编码吗?也许有人可以向我介绍一些入门视频?

Answers:


14

假设您是编程的绝对新手,并且为了使我的示例基于您可能知道的知识,请在编写具有菜单的控制台应用程序时希望用户在可用选项中进行选择,那么您首先要做什么?

如果您想创建菜单,那您很明白,但是如果用户按下了不属于可用选项的键之后,该怎么办?

  1. 您的应用程序将退出,或者
  2. 一直持续到用户按下“退出”键?

我的赌注是#2,该应用程序将继续运行,直到用户明确按下该键退出控制台应用程序为止。

一个游戏有点像!您想何时退出游戏?当用户选择时,对不对?因此,动作或游戏菜单必须持续到用户希望退出为止。然后,您将必须创建一个循环,告诉程序继续运行,直到按下此退出键为止。

您刚刚被介绍给游戏循环。游戏只是在用户明确退出之前一直运行的另一个程序。

在游戏循环中,当您玩游戏时,移动是在屏幕上特定坐标处绘制的图像。当用户/播放器按下方向键(例如)时[Left],您可以使图像刷新其坐标,同时减小其X坐标,从而给人留下向左运动的印象。您必须获得这些输入,才能获得玩家希望其角色/船接下来要做什么。然后,游戏循环继续循环,直到您可以从玩家那里获得另一个所需的动作为止,直到退出游戏为止。

好吧,恐怕这个答案开始的时间就足够长了,所以我希望我能向您指出您可能感兴趣的另外两个问题。

  1. 从哪里开始写游戏,任何教程之类的?
  2. 使用类在XNA中移动我的Sprite

第三个链接不是关于如何开始编写游戏,而是关于如何使精灵在屏幕上移动。由于您还询问了如何使图形在屏幕上移动,因此我认为这可能会让您感兴趣。

我希望这有帮助!=)


4

在制作控制台应用程序时,最有可能使用称为print()或read()或write()的函数。替代这些图形游戏,图形游戏使用其他功能,这些功能可以与set_pixel()一样低,用于将屏幕上单个像素的颜色设置为整个框架,从而使您可以绘制具有很多效果的三维模型。

但是主要思想与简单的数学控制台应用程序相同。您从用户那里得到输入,根据它采取行动来修改一些变量,然后打印(或绘制)一些输出。游戏和其他交互式程序每秒执行30、60或更多的这些输入-计算-输出周期。当然,每个部分都可以随您想要而复杂,但是通常都归结为输入-计算-输出。因此,请放心,您在正确的道路上。

至于建议,我会说你尽可能多地保持编程。如果您有兴趣专注于游戏编程,并且只知道控制台编程,请尝试进行基于文本的小型冒险或RPG。这样,您将练习很多方法来管理变量,使用随机数和组织代码。

在获得一些经验之后,请继续学习图形库的基础知识。如果您要进行过程编程,则建议您使用OpenGL,如果您要进行面向对象的编程,则建议使用XNA。

但是,不要一次拿太多东西。在学习复杂的工具,学习如何管理源代码树,学习如何迭代数组,学习如何获取输入和声音的过程中,很容易感到失望您正在设计游戏。

还有很长的路要走,但是请记住,乐趣实际上正在逐步实现。

保持良好的工作!


4

电脑游戏是一个无休止的循环:

  • 更新:将游戏状态提前一个很小的时间片(例如1/80秒)。
  • 绘制当前游戏状态。

这些有变化。有些游戏在每种绘制之间都有更多更新,或者可以改变它们,以使游戏在不同的机器上同样流畅。但这就是技术细节。

每秒发生50到100次之间的更新阶段(是的,经常这样):

  • 更新游戏物理。假设演员有速度。更新应该使他朝正确的方向移动一点。另外,如果您使用物理引擎,则它应检查是否与其他actos或障碍物发生碰撞。
  • 更新游戏规则。这就是使其成为游戏而不是物理实验的原因。假设子弹击中了播放器演员。游戏规则告诉玩家扣除X点生命值并消失子弹。
  • AI更新。有时,由计算机控制的演员应该放弃该做什么。向左还是向右走?找到通往美好地方的道路。发射武器。
  • 输入控制。根据键盘上的按钮更新播放器演员。
  • 更新场景图。这可以是将动画前进一个步骤,也可以是更新GUI以显示播放器的健康状况降低了10点。这样做的唯一目的是使游戏的外观和感觉良好。

你从哪里开始?

图形游戏的基本要求是对图形进行编程。确保您可以打开一个窗口,并在其中画一个球。

我假设您可以进行某种类的学习。参加Ball课程。它具有以下成员:x,y,deltaX,deltaY。全部为整数,以像素为单位。现在,编写此循环。

forever, do this {
  start measure time (in milliseconds)
  //physics part
  add deltaX to x
  add deltaY to y
  if x is bigger than the screen width, assign -deltaX to deltaX
  if y is bigger than the screen height, assign -deltaY to deltaY
  if x is less than 0, assign -deltaX to deltaX
  if y is less than 0, assign -deltaY to deltaY

  //paint
  paint the ball at x, y
  stop measuring time, assign this to workTime
  make the thread sleep for (25 - workTime) milliseconds
}

这将使球从窗口边界反弹。它不是游戏,而是物理模拟。如果您在球类中编写球物理更新,则很容易添加多个球。将它们存储在列表中,并为每帧更新和绘制每个图像。

您可以添加一个球拍(为其模拟物理并使其可通过鼠标或键盘控制)和游戏目标,例如阻止球到达左墙。如果游戏随时间增加了越来越多的球,难度将增加。你有游戏。

为什么要睡(25-workTime)毫秒?如果这样做,模拟将以每秒40次更新和绘制的恒定速度运行。会很顺利。如果您跳过睡眠部分,动画将变得生涩,并占用100%CPU。而且,球的速度将取决于运行球的机器的速度。现在,球的垂直速度为每秒40 *增量像素。


2

以您的控制台程序执行数学运算,然后在输入正确答案时使它发出一些五彩纸屑……它已经成为一种游戏(除了我之外,还有其他人在小时候玩Math Blaster吗?:)。

至于如何创建计算机来创建游戏环境,有时需要花费很多时间,但这取决于人们对周围世界的理解。游戏运用相同的数学,物理学和科学来定义自己,就像我们应用于周围世界以解释其运作方式一样。

模拟游戏是真实到虚拟的一个很好的例子。很久以前,我读过一次关于模拟游戏背后的家伙的采访,几乎所有的人,无一例外,都是从阅读一个试图解释我们周围世界的话题中诞生的,然后利用数学公式并将其置于虚拟环境中代表它。例如,《模拟城市》(SimCity)源于试图模拟经济基础。

至于如何制作3D游戏环境的细节,请在其中加入物理效果,添加一些音频,然后让用户开始与它进行交互。这就是该网站和许多其他网站的目的,并且不可能总结出更具体的答案。

最后,我将视频游戏描述为非常有限的数据集数据库。它们高度关注关系数据和高速数据访问。.我的意思是,如果每60秒渲染一帧,则根据玩家在游戏中的位置的关系,非常快地处理潜在的大量数据。到游戏跟踪的所有其他数据:)


大声笑,“视频游戏是非常快的有限数据集数据库”,这可能只会加剧混乱。
michael.bartnett

1

您需要了解的是矩阵。他们是游戏的基础。一旦了解了矩阵的功能,您将了解到游戏如何简化为简单的数学。

您在游戏空间中处于顶点位置。您可以使用矩阵将其投影到屏幕上(找到它的屏幕坐标)。您在它和它的相邻顶点之间插入一些像素,就完成了。这显然是一个极大的简化,但是一旦绘制矩阵,光栅化的基础就不会变得很复杂。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.