在 C# 中,我已经看到了 SpriteBatch 类(在用于 XBOX 游戏的 XNA 插件中)。在该课程中,可以分层绘制。现在我想在 Java 中做同样的事情,因为我正在制作辫子(请参阅我的其他问题)并且我有一个来自所有 GameObjects 的 ArrayList 并且该列表不是在正确的paintorer中制作的。
例如:我有一扇门,但门是在播放器上画的。
马汀
对项目列表进行排序应该可以解决您的问题,但是如果您确实发现需要绘制图层,则可以这样做:
为每一层创建一个 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);
}
在渲染之前对项目进行排序怎么样?必须先绘制背景项目,最后绘制前景项目。
如果你有一个 List 并且项目是 Comparable 你可以使用
Collections.sort(list);
如果需要特殊命令,可以实现自己的 Comparator。
当然,所有这些都需要项目保存一些关于其 z 位置的信息。
你不应该在paint方法中这样做。更改项目时对项目进行排序,即。添加。