我正在用Java编写一个2D等距游戏引擎,用于娱乐和练习,我已经到了这样的地步,我试图找出以正确的顺序渲染精灵以模拟深度的最佳方法。我没有读过很多关于这个主题的内容,但我总是喜欢在使用别人之前尝试提出我自己的解决方案。那么,以下两个解决方案中哪一个更优化?为什么?如果我离得太远,那么以正确的顺序渲染精灵的实际最佳方法是什么?注意 - 我的游戏是自由移动的,例如2D Zelda而不是Pokemon Red中的网格样式。
我可以使用按其深度顺序存储的Entity对象的链接列表。然后,每当每个实体移动时,将其当前Y位置与前一个节点和下一个节点进行比较,并在必要时交换位置。然后,重复该过程,直到不再需要为止。 (我不确定Java的链接列表是如何工作的,但如果需要,我可以制作自定义列表)
只需要一个长度等于屏幕高度的实体数组(以像素为单位)。然后,当每个实体移动时,只需将其在阵列中的位置更改为等于屏幕上Y位置的位置(如果拍摄该点,则为最近的可用点)。
答案 0 :(得分:1)
请注意,通过使用AffineTransform
,我们可以将像素值(使用抖动)达到 double
的准确度。为了获得最平滑的结果,我不会满足于任何不使用double的像素值的技术。
我刚读了
AffineTransform
,它看起来非常有用;我很快就会开始使用它。但是,我不明白这是如何适用的。
我怀疑它与排除固定大小的阵列有关,如第2点所示。
假设帧属于“深度”(例如,1个像素平移“向上”对应于距离更远1层的层),则很容易保持固定的 integer
< / strong>相对于最终场景中高度/潜在深度的像素数量的大小,但使用 double
的标准(固定大小)数组几乎不可能做到这一点。
对于第1点,您可以使用按List
深度值排序的Comparator
对图形元素double
进行排序。然后按照列表的顺序绘制它们很简单。