我正在进行塔防游戏,我会有一些标记,可以根据放置的位置在游戏网格之外绘制。我一直在一个画布上绘制一切,这是我的游戏类,我想知道是否有一种方法我只能在一个设定区域绘制某些东西(在这种情况下是我的游戏网格)。
为了更好地解释它,如果要在游戏网格的边缘绘制一个圆圈,就像要切断的悬垂一样。
我的gui是什么样的:
答案 0 :(得分:0)
一种方法可能是调整Graphics
上下文的剪辑。我个人而言,不喜欢弄乱这个片段,因为如果你不小心的话,它会严重搞砸你。
请查看Clipping the Drawing Region了解详情
剪辑示例
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestClip {
public static void main(String[] args) {
new TestClip();
}
public TestClip() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private BufferedImage img;
public TestPane() {
setBackground(Color.BLACK);
try {
img = ImageIO.read(new File("Lurk.png"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(Color.RED);
g2d.drawRect(100, 100, 200, 200);
g2d.setClip(101, 101, 199, 199);
g2d.drawImage(img, 300 - (img.getWidth() / 2), (getHeight() - img.getHeight()) / 2, this);
g2d.dispose();
}
}
}
另一种方法可能是生成一个透明的BufferedImage
作为一个图层,你可以确保你想要限制绘画的正确尺寸,将那些额外的元素绘制到它上面并绘制结果{ {1}}位于地图顶部
图层示例
BufferedImage