[英]Java howto paint on a graphic in an order I want
在C#中,我已经看到SpriteBatch类(在XBOX游戏的XNA插件中) 。 在该类中可以分层绘制。 现在,我想在Java中做同样的事情,因为我正在编织辫子(请参阅其他问题),并且我从所有GameObjects中都有一个ArrayList,并且该列表不是在正确的paintoreder中制作的。
例如:我有一扇门,但门已在播放器上粉刷过。
马丁
对项目列表进行排序应该可以解决您的问题,但是如果您确实需要绘制图层,则可以这样进行:
为每一层创建一个BufferedImage
BufferedImage[] bi = new BufferedImage[3];
bi[0] = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
绘制到缓冲的图像中
Graphics2D bg2 = bi[0].createGraphics();
bg2.drawXXX(...);
那都应该超出实际的绘制方法。
在paint或paintComponent方法中,使用Alpha合成来组装图层
AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f);
g2.setComposite(ac);
for (int i = 0; i < bi.length; i++) {
g2.drawImage(b[i], 0, 0, this);
}
渲染之前如何对项目进行排序? 必须先绘制背景项目,最后绘制前景项目。
如果您有清单,且项目可比,则可以使用
Collections.sort(list);
如果需要特殊订单,则可以实现自己的比较器。
当然,所有这些都需要这些项目在其z位置保留一些信息。
而且您不应该在paint方法中执行此操作。 更改项目时对其进行排序,即。 添加。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.