2013-07-29 55 views
1

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

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

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

回答

1

注意,通过使用AffineTransform我们可以实现像素值(与抖动)来的double精度。对于最平滑的结果,我不会解决任何不使用双倍像素值的技术。

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

我怀疑它是在排除一个固定大小的数组相关,如在点观察2.

假设帧属于“深度”(例如,1个像素翻译“上升”对应于一个层即距离较远的一级),则很容易保持固定的尺寸与最终场景中的高度/潜在深度像素的数量相关,但几乎不可能用标准(固定尺寸)数组double。对于点1,您可以使用Comparator对图形元素的List进行排序,该排序依据double深度值进行排序。然后按照列表的顺序绘制它们是一件简单的事情。

+0

哦,我明白了。当你说像素值时,我认为你的意思是像素中的颜色。现在我看到它是如何应用于此的,在这种情况下,我将使用List选项而不是固定数组 –

+0

*“哦,我明白了。”*说实话,当我刚刚阅读答案时, ,我意识到现在已经在编辑中添加了重要的缺失部分。无论如何,你自己都会达成相同的基本理解。 :) –