代码之家  ›  专栏  ›  技术社区  ›  Sukasa

在等距引擎中剔除屏幕外的瓷砖

  •  3
  • Sukasa  · 技术社区  · 16 年前

    对于一个大学学期项目,我正在研究使用等距显示的图形化roguelike(我知道术语p中的矛盾)。我想知道的是,由于绘制所有瓷砖都是愚蠢的昂贵和不必要的,所以我想找出一个相对快速的算法来确定哪些瓷砖应该绘制以适合nxmpx窗口,因为瓷砖图形是xxypx。

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

    1 回复  |  直到 12 年前
        1
  •  3
  •   U62    16 年前

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

    所以你首先要寻找一种在这两个坐标空间之间隐蔽的方法。一旦你做到了这一点,很明显屏幕空间会以一个45度的矩形映射到世界上。你可以为它确定一个公式,但只有当你试图确定世界上哪一部分空间是可见的时,它才是重要的,所以你只能在那个区域模拟怪物(在8位的控制台上是必要的效率,可能不是在现代的PC上!).当涉及到实际渲染时,您实际上不需要确定世界上的这个可见区域,因为它隐式地表现了将瓷砖渲染到屏幕上的方式:

    1. 你计算出屏幕左上角的瓷砖位置,称之为O(原点)-这将是一个固定的偏移,从你的兴趣点,通常是玩家,你想保持在屏幕的中心。
    2. 一旦你画好了屏幕最上面一行的瓷砖,在世界空间中为每个瓷砖踩+1X和-1Y(如果你是朝东北方向看的话)。
    3. 然后你画下面那一行。在屏幕空间中,偏移量减去半个瓷砖宽度,在世界空间中从0-1X开始。
    4. 重复第2步和第3步,从上一步的第2步开始,将世界空间的起始位置修改为X和Y中的-1,直到到达屏幕顶部。

    其他提示:

    • 很明显,你不会画地图外的任何瓷砖。根据游戏设计,你也可以不在玩家所在的特定房间外绘制任何瓷砖。
    • 这里不仅有地砖可以画,还有玩家、怪物、场景等等。规则是你在同一关卡的一个小世界里画出所有的东西。这样,离“照相机”最近的物体会模糊它们后面的东西(这就是为什么你开始在屏幕顶部绘制)。
    • 此外,在大多数ISO引擎中,您不仅拥有地砖,还拥有家具和墙段。您可以将地图的区域指定为属于特定房间的区域,当焦点位于该房间上时(例如,因为播放器在其中),您不会为最靠近相机的房间侧绘制墙段。

    不管怎样,这已经足够继续下去了,希望它有帮助,你的项目进展顺利。

    推荐文章