私は約2時間の試行後に働くことができなかった問題がありました。私は2つのメソッド(描画と更新)を行うだけでなく、マウス/キーボードのイベントを聞くループをしたいです。私は描画と更新のループを持っていますが、ループの外には何もしません(イベントを聞く)私は物事を試しましたが、何も働いていませんでした。助けてください?Javaアプレットゲームループがマウス/キーボード入力を停止しますか?
私はrunnableスレッドを使用して、wait()とnotify()を使用して異なる注文を使用して試しました。私はたくさん試しました。しかしbasicly私はそれが終了するが、それでもここ
を動作しません、ループを実行し、まだ私は赤い「X」をクリックし、プログラムを終了しようとすると、ユーザー入力も
をチェックする方法を知っていたいですコード:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class main extends Applet implements MouseListener, Runnable {
public main() {
super();
init();
}
Thread t;
Screen screen = new Screen();
String Text = "Hello";
boolean Running = true;
boolean Click = false;
int R = 0x00;
int G = 0x00;
int B = 0x00;
int xpoints[] = {25, 40, 40, 25, 25};
int ypoints[] = {40, 40, 25, 25, 25};
int npoints = 5;
public void run() {
while (Running) {
GameLoop();
}
}
public void init() {
this.addMouseListener(this);
this.setSize(400, 300); //manually set your Frame's size
t = new Thread(this);
t.start();
}
public void paint(Graphics g) {
g.setColor(new Color(R, B, G));
g.fillPolygon(xpoints, ypoints, npoints);
Running = true;
t.run();
}
public void mousePressed(MouseEvent e) { //On Mouse Click
System.exit(0);
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
System.exit(0);
}
public void mouseExited(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public boolean keyDown(Event e, int key) {
return true;
}
public void GameLoop() {
if (Running) {
if (R != 0xff) {
R++;
} else {
if (G != 0xff) {
G++;
} else {
if (B != 0xff) {
B++;
} else {
System.exit(0);
}
}
}
try {
sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
paint(getGraphics());
}
}
public void sleep(int time) throws InterruptedException {
Thread.sleep(time, 0);
}
}
コードを表示できますか?理解していますが、コードを表示するとさらに理解できます。 :) – fireshadow52
私たちはあなたがすでに試したことについてもう少し詳しく知る必要があります。 – jjnguy
GUIを正しくコーディングした後、すでにイベント処理ループに入っている場合は、何も追加する必要はありませんが、興味のあるイベント(この場合はマウス/キーボード)に登録してから、便利なことをしてくださいあなたの登録メソッドが開始されたとき。しかし、あなたは***すべき***しかし、SwingUtilitiesを使用して、便利なinvokeLaterメソッドを使って、画面のリフレッシュ(描画/更新)を別のスレッドに委譲します。詳細なヘルプが必要な場合は、コードを記入する必要があります。 – Perception