1

我正在用 Java 编写一个 2D 等距游戏引擎来娱乐和练习,我已经到了我试图找出以正确顺序渲染精灵以模拟深度的最佳方式的地步。我没有读过太多关于这个主题的书,但我总是喜欢在使用别人的解决方案之前尝试提出自己的解决方案。那么,以下两种解决方案中哪一种更优化,为什么?如果我离得太远,那么以正确顺序渲染精灵的实际最佳方式是什么?注意 - 我的游戏是自由移动的,例如 2D 塞尔达,而不是 Pokemon Red 中的网格样式。

  1. 我可以使用按深度顺序存储的实体对象的链接列表。然后每当每个实体移动时,将其当前 Y 位置与前一个节点和下一个节点进行比较,并在必要时交换位置。然后,重复该过程,直到不再需要为止。(我不确定 Java 的链表是如何工作的,但如果需要,我可以制作一个自定义列表)

  2. 只需有一个长度等于屏幕高度(以像素为单位)的实体数组。然后当每个实体移动时,只需将其在数组中的位置更改为等于其在屏幕上的 Y 位置的位置(或者如果该点被占用,则为最近的可用点)。

4

1 回答 1

1

请注意,通过使用 ,AffineTransform我们可以实现像素值(通过抖动)达到double. 为了获得最平滑的结果,我不会选择任何不使用双倍像素值的技术。

我刚刚阅读AffineTransform,它看起来非常有用;我可能很快就会开始使用它。但是,我不明白这在这里如何适用。

我怀疑它与排除固定大小的数组有关,如第 2 点所示。

假设帧属于“深度”(例如,1 个像素平移“向上”对应于距离更远 1 级的层),很容易保持integer与高度/势的像素数相关的固定大小最终场景中的深度,但使用标准(固定大小)数组几乎不可能做到这一点double

至于第 1 点,您可以使用按深度值排序的Lista 对图形元素进行Comparator排序。double然后按照列表的顺序绘制它们是一件简单的事情。

于 2013-07-29T10:52:11.657 回答