3

我目前正在构建一个 as3 等距游戏,但我在深度排序方面遇到了很多问题。我已经寻找解决方案,但没有找到任何与我的问题匹配的东西(矩形对象)。

这是我的游戏截图:

在此处输入图像描述

如您所见,深度排序在 1x1 平铺对象之间时效果很好。我只是使用它们的 x 和 y 坐标(相对于等轴测图)对它们进行排序。

当我有更大的物体时,问题就出现了,比如 2x2 或 1x4 或 4x1。

知道我应该如何处理深度排序吗?

4

2 回答 2

8

我认为不可能根据每个对象的单个x,y值对场景进行排序,如果其中一些对象的长度足够长以至于一端的深度应该与另一端不同。例如,考虑一下如果图片中的棕色椅子向左下方移动了一个正方形(到蓝色椅子和长沙发之间的正方形),您将如何处理渲染。它在场景中会比沙发后面的红色桌子更深,但需要在沙发顶部渲染,而沙发需要在桌子顶部。

我认为有两个简单的解决方案:

  • 设计你的关卡只使用一种大对象的重叠。例如,您可以指定对象的深度基于其最近的角,这将要求您避免将事物放在其最远的位之前(因为它将在它们之上渲染)。或者你可以坚持你当前的代码(它似乎使用最远的角落作为深度)并避免在更近的部分后面放置任何东西。但是,您可能仍然无法处理四处移动的角色和其他物体。如果您对您的设计很小心,您可能可以使麻烦的图块无法访问,但在某些情况下,这可能过于严格。
  • 把你的大物体分解成更小的物体,它们会有自己的深度。您可能希望直接缩小到 1x1 件,每件都有明确的深度。您可以选择将较大的对象保留在代码中作为较小部分的不可见容器,或者可以完全消除它们,以使您更容易加载并启用与各个位的交互。

将较大的对象拆分成不同1x1大小的部分也很不错,因为您可以将它们模块化。也就是说,您可以通过将1x1不同组合的部件组合在一起来构建不同大小的对象。例如,如果您将2x1图像中的表格垂直切成两半,并创建一个1x1适合它们之间的中间图块,您可以将设计拉伸到3x110x1,具体取决于您重复中间图块的次数。还有很多其他方法可以使平铺图形看起来不错,只需要少量的艺术。

于 2012-06-23T06:56:11.707 回答
2

Ultima Online 仿真器(特别是 POL,尽管可能还有其他仿真器)通过实现和使用“多”的概念来实现这一点 - 由分割的较大图形部分组成的单个对象。这些分割图形使得它们的精灵在 iso 网格边界的左右角点垂直分割。

其他注意事项: - 从上到下渲染按屏幕 Y 轴排序的“多”件。- 'multi' 的南部(即屏幕左下角)组件成为锚定瓷砖位置(在沙发的情况下,它最左边的部分)。- 考虑到每个地图位置也可以拥有自己的垂直对象堆栈;通过 screen-Y 偏移每个对象的渲染模拟高度/高度,并且这些必须从下到上排序(例如最低高度到最高高度)。

祝你好运!

于 2014-09-19T18:52:24.607 回答