2011-05-25 132 views
2

我正在做一个模拟器项目,测试几种基于A *的算法并显示它们如何工作及其结果。这些算法都是多代理程序,并在网格地图环境中运行。使用java图形API绘制图层

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

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

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

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

有没有一种方法可以实现我需要使用与我创建的相同单元格组件或我应该如何实现它不同? 也许有更好的解决这个问题的办法? 我真的很感谢在这个问题上的任何建议。

+0

对[alpha复合](http://keithp.com/~keithp/porterduff/p253-porter.pdf)有更深的理解可能会有所帮助。此外,如果您接受和/或上调有用答案,人们会更认真地回答您的问题。 – trashgod 2011-05-25 10:05:06

+0

完成,我理解alpha合成,但它不能解决问题。如果你绘制一个带有50%alpha的矩形,然后绘制另一个矩形,第二个将会覆盖它而不是混合它 – 2011-05-25 11:37:38

回答

2

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

这取决于模式。这种方便的utility显示了使用AlphaComposite中定义的模式混合不同颜色的结果。可用的source code可能会为您的项目提供一些见解。

附录:

我试图复合的东西是在同一Component

examplecited正是这样做的,因为做到这一点example。如果AlphaComposite不符合您的要求,您可以随时改变色调,饱和度和/或值;这example组成一个基于饱和度的颜色表。

+0

我尝试过使用alphaComposite对象,但它没有多大帮助,因为我试图合成的东西是在我已经在上面阐述了相同的组件 – 2011-05-26 13:20:24

+0

。 – trashgod 2011-05-26 15:11:14

+0

谢谢,我会试着看看这个例子,看看我能做些什么 – 2011-05-26 16:00:08