2016-11-13 65 views
0

我在HTML5画布中创建了2D游戏。这是一个等距世界,实际上它也是3D。 你总是会看到等距游戏使用拼图,我认为其原因仅仅在于深度逻辑。 我的目标是在不使用拼贴系统的情况下创建游戏。每个物品都可以由用户放置,因此物品位置(如墙壁,树木等)具有可变的位置。位置是等距x,y,z坐标。 如果游戏刚刚平铺,您可以确定每个项目的固定瓷砖面积。 (我的意思是:一个瓷砖项目,或一个10瓦长的墙)。 但是在我的游戏中,我使用区域XareaY为物品在地面上使用的空间。我使用高度来存储项目的高度,这是z值。 (我的世界中的z轴,屏幕上是y轴)。没有瓷砖的等距渲染,该目标是否可达?

这个问题很难解释。这是关于深度分类。 参见下面的图像:

enter image description here

在另一杆的顶部的棕色条应是灰色极之后。 我现在使用的是画家算法的最简单形式,它只比较每个项目的x,y,z坐标。 我知道这个不正确的渲染是画家算法的一个着名问题。 如果这是一个平铺游戏,酒吧可以被分成彼此相邻的2个瓦片。然后可以按照其深度的顺序绘制瓦片。

但是因为我正在试图创建它没有瓷砖,我正在寻找一个非常具有挑战性的逻辑。

这些项目应该呈现为3D对象。我甚至想有以下行为:如果有多个项目将相交,则每个项目的可见像素应该可以得出,这样的形象:

enter image description here

的主要问题是,有没有信息确定图像的哪些部分应该可见,以及如何剪切它们。 我可以为每个图像创建一个深度遮罩,例如:

enter image description here它的工作原理有点像z缓冲区。

但是,由于画布的性能,这是不可能的,因为您必须逐字地遍历地图中每个图像的每个像素。 第二大缺点是你必须从服务器加载两倍的资源...

另一种解决方案可能是将所有图像剪切成1像素宽的垂直条。然后处理每个条,就好像它是1x1像素的图块。然后,我仍然在创建一个平铺游戏,购买瓷砖会很小,我仍然达到我的目标。但是这个解决方案也有不利的表现......因为每幅图像都会被拆分成数百条,这是一个新的独立图像。

所以我正在寻找一个具有挑战性的解决方案。谁可以帮助我找到一种方法来定义图像的深度(或深度区域),以便可以正确渲染画布的性能?

+0

树使用three.js所或WebGL的 – mike510a

+0

我将不得不同意。尝试threex.colliders。示例:http://jeromeetienne.github.io/threex.colliders/examples/basic.html – rassar

+0

您可以从2D画布获得合理的性能以获得真正的3D等轴测图,但是您会陷入深度排序,这可能是一种痛苦。 JavaScript标准数组排序可以做一个合理的排序,如果你是如何排列对象(对排序的多边形进行排序)。要解决重叠的多边形,您需要切分它们截取的多边形。此测试可能会很慢,但再次,分组区域将有所帮助。如果你的多边形是轴对齐的,你会得到实时的。一旦你离开,它的速度会慢下来。我赞成webGL,这是它的3D – Blindman67

回答