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

时间:2009-09-02 14:16:37

标签: java graphics arraylist

在C#中,我看到了SpriteBatch类(在XBOX游戏的XNA插件中)。在那个类中,它可以分层绘制。 现在我想在Java中做同样的事情,因为我正在制作编织器(参见我的其他问题),并且我有一个来自所有GameObjects的ArrayList,并且该列表不是在正确的paintoreder中制作的。

例如:我有一扇门,但门被涂在玩家身上。

马亭

2 个答案:

答案 0 :(得分:2)

对项目列表进行排序可以解决您的问题,但如果您确实发现需要绘制图层,则可以这样做:

为每个图层创建一个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);
    }

答案 1 :(得分:1)

如何在渲染之前对项目进行排序? 必须先绘制背景项,然后绘制前景项。

如果你有一个List并且项目是Comparable,你可以使用

Collections.sort(list);

如果您需要特殊订单,可以实施自己的比较器。

所有这些当然要求物品在他们的z位置上保留一些信息。

你不应该在paint方法中这样做。在项目发生变化时对其进行排序,即。加入。