我正在制作一种“游戏”,玩家必须点击在屏幕上弹跳的图像。问题是屏幕处于黑暗中,鼠标光标是一个“手电筒”,它“点亮”了它周围的一个小圆圈。
我有JFrame
一堂课,包括:
public class GameFrame {
public static void main(String[] args) throws IOException {
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
JFrame jf = new JFrame("Flashlight Game");
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(d);
jf.setLocationRelativeTo(null);
GamePanel gp = new GamePanel();
jf.add(gp);
}
}
我有另一堂课extends
JPanel
。以下是与我的问题相关的字段:
private Point mouse; //location set by a MouseMotionListener
private BufferedImage myImage;
private int imageX;
private int imageY;
private int imageSpeedX;
private int imageSpeedY;
我的第一个问题在于手电筒。在我的paint
方法中,我将图形背景颜色设置为面板背景颜色,并使用该clearRect
方法清除鼠标光标周围的区域。
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
super.paint(g2);
checkBounce();
move();
g2.drawImage(myImage, imageX, imageY, null);
g2.setColor(Color.BLACK);
g2.fillRect(0, 0, this.getWidth(), this.getHeight());
g2.setBackground(Color.WHITE);
g2.clearRect((int) mouse.getX() - 25, (int) mouse.getY() - 25, 50, 50);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
}
这里实际上有两个问题。1.)由于手电筒在矩形中不发光,如何创建clearOval
效果,以及 2.)如何使弹跳图像通过手电筒光束显示?我知道调用g2.setBackground(Color.WHITE)
将使用设置的颜色作为清除区域的“背景”,但我需要一种方法来清除除最后JFrame
或JPanel
背景颜色之外的所有图形。
我的最后一个问题有点奇怪,但有时当我更改 an 的值时int
,窗口会显示为空白,需要在执行任何代码之前调整大小。