Merge 如何屏蔽显示在背景BuffereImage顶部的网格BuffereImage
这里的第一个问题,在java(英语不是我的母语)是很新的,请原谅:) 没有发现任何类似的问题 我正在尝试制作一个2D游戏(逐轮,所以没有实时问题)。我的地图显示在JPanel中,混合了背景、栅格和可移动对象的图像。 所有图像在显示前加载并存储一次。我有一个用于背景的BuffereImage,另一个用于绘制网格,还有许多用于其他对象的图像。 在paintComponent()中,我在Graphics2D上绘制所有BuffereImage(从Graphics参数转换)。 我的问题是当玩家选择屏蔽网格时(或者当比例太大时,分别使用变量“ruleGrid”和“zoom”)屏蔽网格。测试文本输出已正确记录,但网格仍然可见。 两张图片似乎都合并了,我无法掩盖第二张。 我尝试在其他地方(其他坐标)显示栅格,效果很好。但如果两个图像重叠,则另一个图像上的网格部分保持不变(就像在第一个图像上绘制一样,而不是在JPanel上绘制一样)。 对不起,如果不够清楚 一些屏幕截图可能会有所帮助: 当前位置问题出在这里。网格的重叠部分仍然“打印”在背景图像上,其余网格显示在背景下 为什么会这样?我做错了什么?这是由于Graphics2D类的优化/渲染造成的吗?我应该使用分层窗格吗? 对于两个BuffereImage,我都使用:Merge 如何屏蔽显示在背景BuffereImage顶部的网格BuffereImage,merge,bufferedimage,graphics2d,overlapping,Merge,Bufferedimage,Graphics2d,Overlapping,这里的第一个问题,在java(英语不是我的母语)是很新的,请原谅:) 没有发现任何类似的问题 我正在尝试制作一个2D游戏(逐轮,所以没有实时问题)。我的地图显示在JPanel中,混合了背景、栅格和可移动对象的图像。 所有图像在显示前加载并存储一次。我有一个用于背景的BuffereImage,另一个用于绘制网格,还有许多用于其他对象的图像。 在paintComponent()中,我在Graphics2D上绘制所有BuffereImage(从Graphics参数转换)。 我的问题是当玩家选择屏蔽网格
BufferedImage.TYPE_INT_ARGB
.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
下面是我的代码的简化:
BufferedImage mapZones;
BufferedImage mapGrid;
@Override
public void paintComponent(Graphics g1){
Graphics2D g = (Graphics2D)g1;
//Clear the map
clearBackground(g);
//Display Background
displayMap(g, mapZones);
//Grid
if (Options.ruleGrid && Options.zoom > 4f) {
displayMap(g, mapGrid);
System.out.println("Test if grid should be displayed");
}
}
/*********************************************************************************************************/
private void displayMap(Graphics2D g, BufferedImage bufI) {
g.drawImage(bufI, -x0, -y0, width, height, null);
}
/*********************************************************************************************************/
private void clearBackground(Graphics2D g1) {
g1.setColor(Color.WHITE);
int max = 500000;
g1.clearRect(-max, -max, max*2, max*2);
}
/*********************************************************************************************************/
任何帮助都将不胜感激。谢谢。找到原因(但不是“为什么”)。
我第三次打电话给“displayMap”,电话中有一张空图像
//Display Elements
displayMap(g, mapElements);
它是由
mapElements = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
我还没有把它画出来
当我对“displayMap(g,mapElements);”的调用进行注释时,我终于有了想要的行为
但我还是不知道为什么?我认为这是图形类和“绘制”函数的编码方式:
此方法在所有情况下都会立即返回,即使尚未加载完整图像,并且尚未对当前输出设备进行抖动和转换
我猜JVM以某种方式“池”(?)相同区域中的图形和我的地图被合并。。。
如果有人能用一种简单的方式解释这一点