我的程序是用Java编写的。我在run()方法中检查了IF()(在一个Thread中)。在IF检查中,如果条件满足,则会显示一个Window对话框(使用JOptionPane.showMessageDialog)和OK按钮。然而,它无限展示。当我单击“确定”时,它会一次又一次弹出。如何在用户单击“确定”后结束if检查。或者当条件满足时,它只显示一次?
这是我的方法()
public void danhHoiWumpus()
{
if ((GameScreen.bg[x[0] + 1][y[0]] == 2) || (GameScreen.bg[x[0] + 2][y[0]] == 2) || (GameScreen.bg[x[0] + 3][y[0]] == 2) || (GameScreen.bg[x[0]][y[0]+1] == 2) || (GameScreen.bg[x[0]][y[0]+2] == 2) || (GameScreen.bg[x[0]][y[0]+3] == 2))
{
JOptionPane.showMessageDialog(this, "Có mùi wumpus ! \n Bạn được học bổng 40%");
}
}
这是我的run()方法
public void run()
{
while(true)
{
hunter.update();
hunter.danhHoiWumpus();
// i++;
repaint();
// System.out.println("Gia tri cua y la " +i);
try {
thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
这个行动的想法是。当RED广场靠近YELLOW广场时,会弹出一个对话框,我闻到了Wumpus"。当用户单击“确定”时。他们会选择射击wumpus(我稍后会这样做)。
这是我的完整源代码(供参考):
https://www.mediafire.com/?wkp6hyq32nq23mp
提前谢谢。
答案 0 :(得分:0)
您的代码在无限循环中执行
while(true)
// I am infinite
}
您正在寻找的术语是命中检测。有很多方法可以实现它。在Java中查找命中检测以获取一些指示。
但你所拥有的并不一定是错的。
while (true) // I'm not always bad!
用于很多应用程序。但是,虽然您的代码尚未完整发布,但我无法看到您从中脱颖而出的任何地方。您可能对
感兴趣java.util.Timer
和
java.util.TimerTask
这两者在Java游戏开发中都有广泛的应用
答案 1 :(得分:0)
你的睡眠时间太短(20纳秒)。增加时间,否则你会很快理解它。
答案 2 :(得分:0)
如果条件很多次,你可能会触发这个。
你需要一些上升沿触发器'逻辑,以便仅在新值从false变为true时触发,而不是在其值为真时触发。
currentValue = bigLongLogicCheck;
if(!oldvalue&¤tValue) {alert()}
oldvalue = currentValue