問題: Main.repaint() が機能しません。repaint() は Main のペイント メソッドを呼び出しません。再描画する前に検証を呼び出してみましたが、成功しませんでした。メインは最初またはサイズ変更時に完全にペイントしますが、コードで repaint() を呼び出しても何も起こりません。
これまでのプログラムの外観は次のとおりですリンク
Javaでゲームのレベル選択画面を作成しようとしています。私のゲームは JApplet です。私は次のような構造を持っています:
JApplet を拡張し、LevelScreen クラスのオブジェクトを含むメイン クラス
LevelScreen には、Main が呼び出すペイント メソッドがあります。
レイアウトマネージャーがデザインに問題を抱えていたので、Swing の使用を避けようとしました。そこで、よりシンプルで自分のニーズにより適した構造を作ろうとしました。
Main.java の paint()
public class Main extends JApplet {
public static final int WIDTH = 700, HEIGHT = 500;
private static Main instance;
private LevelScreen levelScreen = new LevelScreen();
private View view = View.LEVELSCREEN;
public static Main getInstance() {
if (instance == null)
instance = new Main();
return instance;
}
@Override
public void init() {
setSize(WIDTH, HEIGHT);
addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
Point p = e.getPoint();
if (view == View.LEVELSCREEN) {
levelScreen.mouseMoved(p);
}
}
});
}
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
if (view == View.LEVELSCREEN)
levelScreen.paint(g2);
}
public enum View {
GAME, LEVELSCREEN;
}
}
私のボタンのコードでは、マウスがボタンを離れたときにフェードアウトアニメーションを作成したいので、メインを再描画しようとしています。私の問題は、メインで repaint() を使用してペイント(Graphics g)を呼び出すことができないことです
ここで repaint() を呼び出します:
public void mouseExited() {
//start new thread to make fade out animation when mouse leave
mouseOver = false;
TimerTask task = new TimerTask() {
@Override
public void run() {
while (!mouseOver && opacity > 0.6) {
opacity -= 0.02;
//set level to 999 so i can see if the game repaints()
level = 999;
Main.getInstance().repaint(); //this doesnt work!!
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
new Thread(task).start();
}