Четкая часть графики с базовым изображением

Я делаю своего рода «игру», в которой игрок должен щелкнуть изображение, подпрыгивающее по экрану. Суть в том, что экран находится в темноте, а курсор мыши - это «фонарик», который «освещает» маленький круг вокруг него.

у меня есть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 фоновый цвет.

Моя последняя проблема немного странная, но иногда, когда я меняю значениеintокно будет пустым и требует изменения размера перед выполнением любого кода.

Ответы на вопрос(1)

Ваш ответ на вопрос