6

我正在尝试用 js(画布)编写游戏引擎。到目前为止,一切都很好。但是我遇到了一个问题,我的世界是菱形的,我从上到下渲染瓷砖。

问题是当我有一个大于 1 个瓷砖的瓷砖(例如 2x2)时,会发生这种情况:

示例渲染

房子是在瓷砖 (2,1) 上定义的。左边的石头放在 (1,0)

首先渲染图块 (1,0),下一个图块是 (2,1),因为它位于同一行且位于右侧。

你怎么能解决这个问题?

4

4 回答 4

4

您应该能够通过将图形分解成更小的部分来避免这个问题 - 网格上的每个图块一个。一个很好的想法是这样的:如果你可以从正上方查看网格,每个精灵不应该溢出它们分配到的单元格的边缘。

例如,下面的这个单元格可能应该只包含较小立方体所示的房子的前部:

在此处输入图像描述

在某些时候,您可能还需要对同一单元格中的多个精灵进行微观管理,但在较小的空间中这是相同的概念。

于 2013-10-09T23:25:40.230 回答
1

对于这个特定示例,有一个更简单的解决方案。

现在房子占据了这些空间: 2x0, 3x0, 2x1, 3x1 你正在从位置 2x1 绘制房子

如果您改为从位置 2x0 绘制房子(并且仍然占据相同的原始 4 个瓷砖),所有瓷砖都会以正确的顺序绘制。

只要您在屏幕行中从上(后)到下(前)绘制图块,您就可以轻松使用 2x2、3x3、4x4 或任何正方形大小的超大图块,而无需切片。只需沿着它们的中间行位置绘制这些较大的瓷砖。我经常使用左角作为这些大瓷砖的网格锚点。这样在我的脑海中是有道理的,因为一旦你画出一个大等距正方形的最左(或右)角,你就把它后面已经画的所有东西和它前面的东西分开了。

矩形超大图块(例如 2x1、2x3、2x4、3x4、4x5)通常需要比仅从上到下的屏幕行更复杂的绘制顺序算法。我选择将它们切成方形瓷砖。

旁注,如果你想走那条路,中世纪的房子瓷砖确实已经将原始部分分成垂直切片(我的原件在 OpenGameArt 上)。

于 2017-06-13T04:01:22.550 回答
0

我认为这里最好的解决方案显然是使用预定义的度量(例如图块的宽度)来划分图形。基于图块的系统广泛用于 2D 游戏,包括等距游戏。

示例:http ://www.spriters-resource.com/pc_computer/fallouttactics/

于 2013-10-09T22:59:49.630 回答
0

我的解决方案(还要感谢 Marty Wallace!)

我可以将精灵切成如下图所示的 3 块

第一部分绘制在坐标 (2, 0) 上

第二部分绘制在坐标 (2, 1) 上

第三部分绘制在坐标 (3, 1) 上

所以我们在底部的瓷砖上垂直切片(绘制的瓷砖就像一个 V 形)这应该适用于每个瓷砖尺寸,比如 4x4

我们可以忘记瓷砖 (3, 0)

蓝色:实际的 png 红色:切割线

线条有点偏离,但这是关于这个想法我需要一些睡眠(最后 2 是 3 当然)

在此处输入图像描述

这也给了我们一个简单的计算:

sizeX - 1 = The number of sides on the right of the middle section (the big one)
sizeY - 1 = The number of sides on the left side of the middle section

每个切片都是瓦片宽度的一半,中间的片是整个瓦片宽度。右侧切片仅包含图块的最右侧部分,左侧部分包含最左侧。

我们可以轻松使用 3x1 或 1x4 等瓷砖

于 2013-10-10T00:10:11.443 回答