3

对于一个大学学期项目,我正在研究一个使用等距显示的图形 roguelike(我知道术语:P 的矛盾)。我想弄清楚的是,由于绘制所有瓷砖非常昂贵且不必要,我想找出一种相对快速的算法来确定应该绘制哪些瓷砖以适合 NxMpx 窗口,因为瓷砖图形是 XxYpx。

我没有为此进行平滑滚动,所以这不是问题。我也不担心完美 - 一点不必要的抽奖很好,我只是不想绘制大量不会出现在游戏中的不必要的瓷砖。

4

1 回答 1

4

你需要考虑两个概念:屏幕空间和世界空间。这些在 3d 引擎中非常重要,但它们适用于除了最简单的游戏之外的所有游戏。在等距引擎中,您的世界空间是一个 2d 瓷砖阵列。

因此,您首先要寻找一种在这两个坐标空间之间进行隐蔽的方法。完成此操作后,很明显屏幕空间会以 45 度角的矩形映射到世界上。您可以为此确定一个公式,但这仅在您尝试确定世界空间的哪个部分可见时才重要,因此您只模拟该区域中的怪物(在 8 位控制台上需要效率,而在现代 PC 上可能不需要! )。当涉及到实际渲染时,您实际上并不需要确定世界的这个可见区域,因为它隐含在您将图块渲染到屏幕上的方式中:-

  1. 您计算出屏幕左上角的图块位置,称之为 O(表示原点) - 这将是您想要保持在中心的兴趣点(通常是玩家)的固定偏移量屏幕。
  2. 完成后,您可以在屏幕的第一行绘制图块,在每个图块的世界空间中步进 +1X 和 -1Y(如果您正在寻找东北)。
  3. 然后你画下面的行。这是在屏幕空间中的偏移量减去半块宽度,并从世界空间中的 O -1X 开始。
  4. 您重复第 2 步和第 3 步,将您在世界空间中的起始位置从您在前一阶段 2 中使用的 X 和 Y 中的位置修改为 -1,直到您到达屏幕顶部。

其他提示:-

  • 显然,您不会绘制地图之外的任何图块。根据游戏设计,您也可能不会在玩家所在的特定房间之外绘制任何图块。
  • 不仅要绘制地砖,还有玩家、怪物、场景等。规则是您在同一个通道中绘制特定世界位置的所有内容。这样,最靠近“相机”的物体会掩盖它们背后的东西(这就是你开始在屏幕顶部绘制的原因)。
  • 此外,大多数 iso 引擎不仅有地砖,还会有家具和墙段。您可以将地图的区域指定为属于特定房间,当焦点位于该房间时(例如,因为玩家在其中),您不会为房间最靠近相机的一侧绘制墙段.

无论如何,这已经足够了,希望它对您有所帮助,并且您的项目进展顺利。

于 2010-01-14T12:05:32.940 回答