Java2D 选择具有 Alpha 背景重叠的各种图像的最佳方法?

标签 java game-engine java-2d isometric

我正在用 Java2D 开发等距游戏。也就是说,请注意,我无法直接访问硬件像素着色器(实时软件像素着色器不实用。我可以对每个实体纹理执行一次传递对性能没有明显影响)

我知道典型的方法是以某种方式将单个像素的深度编码到深度缓冲区中并进行查找。但是,我不知道如何在 Java2D 中有效地做到这一点。我将如何存储深度缓冲区?我将如何过滤掉图像中的 alpha?等等

到目前为止,我一直在反转用于计算图 block 坐标的投影矩阵。但是,当您的实体在这些图 block 的边界之外呈现时,这就不太适用了。

我考虑过的另一种方法是使用颜色图,但是我遇到了与深度缓冲区相同的问题(如果我能让深度缓冲区工作,我更愿意使用它。)

这是我正在使用的图片: enter image description here

最佳答案

我已经很好地解决了这个问题。解决方案其实很简单,只是非常规而已。

图形通过 TreeMap 进行深度排序,然后呈现到屏幕上。可以简单地反向遍历此 TreeMap(并保持它直到下一个渲染周期)以将光标位置转换为它覆盖的正确图像(通过测试像素 [以反向渲染顺序] 并检查它们是否透明。)

解决方案在开源项目中,io.github.jevaengine.world.World类下,pick方法。 https://github.com/JeremyWildsmith/JevaEngine/blob/master/jevaengine/src/main/java/io/github/jevaengine/world/World.java

关于Java2D 选择具有 Alpha 背景重叠的各种图像的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18726605/

相关文章:

java - JPanel 布局图像截断

java - 裁剪 BufferedImage strip 的有效方法

java - 如何删除自定义链表中的所有节点?

java - Scala中有游戏引擎吗?

java - java中的简单泛型列表

javascript - 以编程方式在 melonJS 中插入实体

Java 3D 游戏开发

Java 用纹理绘制线条

java - Eclipse:从源代码打开文件路径

java - 如何在openshift中运行java服务器socket程序(类文件)