2

我正在做一个模拟器项目,测试几种基于 A* 的算法并展示它们的工作原理和结果。这些算法都是多智能体并在网格地图环境中运行。

我为网格使用了 JPanel,其中包含一个二维单元格数组,其中每个单元格都是一个自定义类,它扩展了 Component 类并使用paint方法在每个单元格内绘制我需要的东西。对于单元格内的绘图,我使用诸如 Graphics.fillRect 或 Graphics.drawImage 之类的方法来用某种颜色或图标填充每个单元格)。

我为网格上每个代理的起始位置和目标位置使用了一个特殊的图标。我的问题是我希望能够在同一个单元格上绘制多个项目。

例如,我希望能够通过以特殊颜色沿路径绘制单元格来显示其中一个代理的路径,并且路径可能会通过不同代理的起始位置,所以我希望能够填充带有颜色的单元格,并在顶部绘制一个图标。在另一个示例中,我希望能够使用 alpha 混合来混合两种颜色。

如果我使用具有 alpha 的一种颜色的 graphics.fillRect(),然后再次使用具有 alpha 值的不同颜色,它将无法工作,因为最后一个 fillRect() 将覆盖第一次调用。

有没有办法可以使用我创建的相同单元组件来实现我需要的东西,或者我应该以不同的方式实现它?也许这个问题有更好的解决方案?我真的很感激关于这个问题的任何建议。

4

1 回答 1

2

如果您绘制一个具有 50% alpha 的矩形,然后再绘制另一个,则第二个将覆盖它而不是与之混合。

这取决于模式。这个方便的实用程序显示了使用中定义的模式混合不同颜色的结果AlphaComposite。可用的源代码可能会为您的项目提供一些见解。

附录:

我试图合成的东西是相同的Component

引用示例 正是这样做的,本示例也是如此。如果不符合您的要求,您可以随时更改色调、饱和度和/或值;这个例子组成了一个基于饱和度的颜色表。AlphaComposite

于 2011-05-25T11:52:43.100 回答