繁体   English   中英

Java如何按我想要的顺序在图形上绘画

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM