Parte clara dos gráficos com imagem subjacente

Eu estou fazendo um 'jogo' de tipos onde o jogador tem que clicar em uma imagem pulando pela tela. O problema é que a tela está no escuro e o cursor do mouse é uma "lanterna" que "ilumina" um pequeno círculo em torno dele.

eu tenho umJFrame em uma classe que consiste em:

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);
}

}

Eu tenho outra classe queextends JPanel. Aqui estão seus campos relevantes para meus problemas:

private Point mouse; //location set by a MouseMotionListener
private BufferedImage myImage;
private int imageX;
private int imageY;
private int imageSpeedX;
private int imageSpeedY;

Meu primeiro problema está na lanterna. No meupaint método, eu definir a cor de fundo de gráficos para a cor de fundo do painel e usar oclearRect método para limpar uma área ao redor do cursor do mouse.

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();
}

Na verdade, existem dois problemas aqui. 1.) Como posso criar umclearOval efeito desde que uma lanterna não brilha em um retângulo, e 2.) Como posso obter a imagem saltando para aparecer através do feixe de luz? Eu sei que chamarg2.setBackground(Color.WHITE) vai usar a cor definida como o "fundo" para a área limpa, mas eu preciso de uma maneira de limpar todos os gráficos, exceto para o backmostJFrame ouJPanel cor de fundo.

Meu último problema é meio esquisito, mas ocasionalmente quando eu mudo o valor de umint, a janela aparecerá em branco e precisará ser redimensionada antes que qualquer código seja executado.

questionAnswers(1)

yourAnswerToTheQuestion