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

я делаюигра' своего рода, где игрок должен нажать на изображение, подпрыгивая вокруг экрана. Подвох в том, что экран находится в темноте, а курсор мышифонарик' который 'загораться' маленький круг вокруг него.

у меня есть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 эффект, так как фонарик неt сиять в прямоугольнике, и 2.) Как я могу получить прыгающее изображение, чтобы показать через луч фонарика? Я знаю это призваниеg2.setBackground(Color.WHITE) будет использовать заданный цвет какфон' для очищенной области, но мне нужен способ очистить всю графику, кроме самой заднейJFrame или жеJPanel фоновый цвет.

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

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

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