1

私は、プレイヤーが画面上を跳ね回る画像をクリックしなければならないような「ゲーム」を作っています。問題は、画面が暗くなっていることと、マウス カーソルが「懐中電灯」になっていて、その周りの小さな円を「照らす」ことです。

私は次のJFrameもので構成される1つのクラスを持っています:

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

ここには実際には 2 つの問題があります。1.)clearOval懐中電灯は四角形で光らないので、どうすれば効果を作成できますか? 2.) バウンスする画像を懐中電灯のビームを通して表示するにはどうすればよいですか? 呼び出すg2.setBackground(Color.WHITE)と、クリアされた領域の「背景」として設定された色が使用されることはわかっていますが、一番後ろJFrameまたはJPanel背景色を除くすべてのグラフィックをクリアする方法が必要です。

私の最後の問題は少し奇妙ですが、 の値を変更するintと、ウィンドウが空白として表示され、コードを実行する前にサイズを変更する必要があります。

4

1 に答える 1