0

让我痛苦的是,当我年轻的时候,我从来没有像我应该在数学课上那样集中注意力......所以,我正在向手头的社区询问一些关于从哪里开始寻找的想法。

我最近一直在想一些游戏,如 Battlezone、Robot Tank 等是如何在 80 年代制作的。如果我想制作这样的游戏,我需要什么数学来实现这些游戏中使用的雷达,我如何将其转化为第一人称视角?有什么我可以剖析的例子吗?

感谢您的帮助!

4

2 回答 2

2

在此类游戏中,可以采用几种通用方法来计算数学。

  • 一种方法是在直角坐标系中跟踪所有对象(包括玩家)的位置,其中增加的 Y 始终表示相同的方向(例如“北”)。为了使这种方法运作良好,物体可以移动的空间应该有一个限制。

  • 另一种方法是在上面的固定方向坐标系中跟踪除了玩家之外的所有东西的位置,但假设玩家总是在 0,0;要将玩家移动一定距离,请将所有其他对象的位置移动该距离。与玩家的距离过大的对象通常应该不存在,尽管在某些情况下坐标“环绕”也是可以接受的(因此,如果玩家在基本罗盘方向上游荡得足够远,对象将重新出现)。

  • 另一种方法是使用以玩家为中心的坐标系,但不断旋转物体,以使增加的 Y 方向始终位于玩家的正前方。这种方法简化了绘图,但旋转播放器的成本要高得多,尤其是在想要避免其他物体轻微移动的情况下。另一方面,这种方法对于所有非玩家对象都在移动的游戏来说是可以接受的,这样一些由数字快捷方式引起的杂散运动不会太明显。

  • 最后,人们可以努力在极坐标中存储除玩家之外的所有东西的位置。如果有人试图准确地描绘事物,这种方法不会有太多可推荐的,但有些游戏使用了非常粗略的近似值并取得了相当大的成功。

在现代硬件上,我会建议前两种方法之一。后两者有时在为 1980 年代的游戏机或计算机编写游戏时很有用,这些游戏机或计算机的 RAM 不到 1%(有时不到 RAM 的 1/1,000,000——字面意思!)并且运行速度不到 RAM 的 1/1000。今天机器的速度,但主要是出于历史兴趣而提及。

如果您的游戏将对象位置保持在正 Y 是北坐标系中,则可以通过首先计算相对于玩家位置的 X 和 Y 来确定它们应该出现在屏幕上的位置(如果坐标未保持在该格式中,则减去玩家 X 和 Y 从真实位置)。然后通过计算 MX = X*sin(heading)+Y*cos(heading) 和 MY = Y*sin(heading)-X*cos(heading) 将这些坐标转换为正 Y-is-ahead 坐标。MX,MY,Z 点的屏幕坐标(Z 坐标为 0,屏幕坐标为 0)将是 SX = MX/MY 和 SY = Z/MY。

您可能必须使用缩放和单位来使对象显示为适当的大小和比例,并避免绘制离玩家太近(或更糟,落后)的对象,但上述公式应该可以帮助您入门。

于 2013-06-08T18:51:54.097 回答
1

您很可能会尝试从笛卡尔坐标系(即 x、y 坐标)转换为极坐标(即,与“雷达”中心的角度和距离)。这是一个相对简单的三角变换。

于 2013-06-08T18:44:27.283 回答