Java小程序游戏循环停止鼠标/键盘输入?
我遇到了一个问题,经过大约两个小时的努力,我无法上班。我想有一个循环,可以执行两种方法(绘制和更新),但也可以侦听鼠标/键盘事件。我有一个绘制和更新的循环,但在循环之外什么都不做(听事件)。我尝试了很多事情,但都没有成功。请帮忙 我尝试使用可运行线程,使用不同的命令,使用wait()和notify(),我已经尝试了很多方法。但基本上,我想知道如何运行循环并仍然检查用户输入 另外,当我尝试单击红色的“X”退出程序时,它不会退出,但仍然有效 代码如下:Java小程序游戏循环停止鼠标/键盘输入?,java,events,loops,input,mouse,Java,Events,Loops,Input,Mouse,我遇到了一个问题,经过大约两个小时的努力,我无法上班。我想有一个循环,可以执行两种方法(绘制和更新),但也可以侦听鼠标/键盘事件。我有一个绘制和更新的循环,但在循环之外什么都不做(听事件)。我尝试了很多事情,但都没有成功。请帮忙 我尝试使用可运行线程,使用不同的命令,使用wait()和notify(),我已经尝试了很多方法。但基本上,我想知道如何运行循环并仍然检查用户输入 另外,当我尝试单击红色的“X”退出程序时,它不会退出,但仍然有效 代码如下: import java.applet.Appl
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);
}
}
我看到您在初始化时将运行变量定义为true。此变量用于确定游戏是否应停止。一、 但是,没有看到将此变量的值修改为false的任何地方。这可以解释为什么你的游戏永远不会退出 至于游戏无法运行,请尝试在IDE中调试应用程序。然后,您应该注意抛出了什么异常(如果有),以及您询问的任何变量的值。希望这能让你深入了解应用程序的行为 别忘了用您发现的任何新信息更新我们,这样我们就可以帮助您解决问题。应该为您的程序的结构提供一些见解。并且对鼠标侦听器很有帮助 您应该解决的问题:
1) 你用
paint
方法做了一些可疑的事情。你为什么在那里调用t.run()
?线程t
已经在运行并不断循环调用paint()
方法来重新绘制屏幕。删除此呼叫,然后查看得到的结果
1) 线程/应用程序的破坏很差。上面的第一个例子提供了一种更好的方法
2) 您拥有您的系统。在鼠标按下()
上退出(0)
,并在鼠标按下()
中添加注释。。。它起作用,但它的坏习惯
3) 将类命名为main
是非常糟糕的惯例,既令人困惑又不切实际。将类重命名为“游戏”或类似的名称
4) 如果不使用,为什么要声明
屏幕?可以显示代码吗?我理解,但如果您显示代码,我会理解更多。:)我们需要更多关于您已经尝试过的内容的信息。如果您正确地编写了GUI,那么您已经处于事件处理循环中,您不需要做任何其他事情,只需要注册您感兴趣的事件(在本例中为鼠标/键盘),然后在启动注册方法时执行一些有用的操作。但是,您应该使用SwingUtilities通过其方便的invokeLater方法将屏幕刷新(绘制/更新)委托给另一个线程。如果你需要详细的帮助,你应该发布一些代码。真的很奇怪,1)修复了它,尽管我记得用它尝试了一切…我昨天可能太累了,谢谢你,你的应用程序坏了什么?知道这一点很好,因为这对我来说是一种冒险,哈哈。