所以我在我的游戏中制作一个简单的暂停功能,我想要一个灰色的透明背景,问题是,矩形保持重叠,只是导致淡出的外观。我已经尝试过g2.dispose了,但它确实有效,但我无法在此处绘制任何其他内容。
我有我的渲染方法,每秒调用60次。 (我发现矩形每秒被绘制60次)
public void render(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(new Color(0, 0, 0, 50));
g2.fillRect(0, 0, RPG.getWidth(), RPG.getHeight());
g2.drawImage(paused, 0, 0, null);
}
谢谢!
答案 0 :(得分:1)
编辑:我觉得自己像个白痴......我只需要在下面绘制我的游戏画面!
答案 1 :(得分:0)
如果我通过“导致淡出效果”正确理解你的意思(虽然我不确定),你想要用透明色填充背景而不将新的透明色与已经是的像素混合当下。您可以通过将复合模式设置为“source”来执行此操作:
g2.setComposite(AlphaComposite.Src);
您可以将其设置回默认的“目标来源”规则,然后通过执行以下操作返回到正常绘图:
g2.setComposite(AlphaComposite.SrcOver);
编辑:或者你可能想要混合透明色,但是与游戏图形的其余部分混合而不是自身?在这种情况下,只要确保每次在顶部绘制透明度时重新绘制游戏背景,尽管如果屏幕上没有任何内容发生变化,我建议暂停游戏暂停时的60fps刷新,以避免浪费CPU /电池。
答案 2 :(得分:0)
首先尝试创建Graphics
上下文的副本,然后在完成后处理它...
public void render(Graphics g) {
Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(new Color(0, 0, 0, 50));
g2.fillRect(0, 0, RPG.getWidth(), RPG.getHeight());
g2.drawImage(paused, 0, 0, null);
g2.dispose();
}
这样,Graphics
状态的更改在create
和dispose
调用之间保持隔离状态,并且不会影响其后绘制的任何内容
另外,请记住,除非您要清除以前在Graphics
上下文中绘制的内容,否则它会在重复调用时累积。