0

在 C# 中,我已经看到了 SpriteBatch 类(在用于 XBOX 游戏的 XNA 插件中)。在该课程中,可以分层绘制。现在我想在 Java 中做同样的事情,因为我正在制作辫子(请参阅我的其他问题)并且我有一个来自所有 GameObjects 的 ArrayList 并且该列表不是在正确的paintorer中制作的。

例如:我有一扇门,但门是在播放器上画的。

马汀

4

2 回答 2

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);
    }
于 2009-09-02T16:21:20.613 回答
1

在渲染之前对项目进行排序怎么样?必须先绘制背景项目,最后绘制前景项目。

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

Collections.sort(list);

如果需要特殊命令,可以实现自己的 Comparator。

当然,所有这些都需要项目保存一些关于其 z 位置的信息。

你不应该在paint方法中这样做。更改项目时对项目进行排序,即。添加。

于 2009-09-02T14:47:53.540 回答