当我等待按下按钮时,如何暂停暂停?我一直在四处寻找,我似乎无法找到它,以为我会在这里试试。
编辑 -
我正在制作一个二十一点游戏,一旦游戏到达循环点,我需要将玩家输入到HITME或STAND我添加按钮来执行,我用按钮,HITME和STAND添加了一个gui那,但我无法弄清楚如何暂停循环检查按钮是否被按下,以及哪一个继续。
我试过的是这个:
(othercode)
g.printPlayerCards(p1);
g.totalworth(p1);
thing.messagetop("Your total card amount is: " + p1.getTotalWorth());
thing.messagetop("Hit me? or stay?");
thing.waitonbutton();
public void waitonbutton(){
wantingtobeclick = 1;
do{
while(!(hitme == 0)){
hitme = 0;
wantingtobeclick =0;
}
}while(wantingtobeclick == 1);
}
public void actionPerformed(ActionEvent e) {
if(wantingtobeclick == 1){
if (e.getSource() == HitMe){
hitme = 1;
System.out.println("ICLICKEDHITME");
g.hitMe(player1);
waitonbutton();
}
if(e.getSource() == Stand){
hitme = 1;
g.changestandhit();
}
}
}
它只是停留在无限循环中,并且不会继续使用main中的循环。
答案 0 :(得分:0)
我能想到“暂停”循环的唯一方法是在循环期间执行更多代码,最好是在不同的线程上执行。即。
while (true) {
if (_buttonIsPressed) {
Thread.sleep(5000); // loop is paused
}
}
但是,更重要的是,感觉你可能会以错误的方式处理事情。
而不是运行循环来检查是否发生了某些事情,一旦按下按钮,你最好不要触发动作。这称为event-driven programming。
答案 1 :(得分:0)
我修复了它,以防万一其他人有同样的问题:
我把它添加到main:
do{ } while(!(thing.waitonbutton()));
然后这到我的图形类:
> public boolean waitonbutton(){
wantingtobeclick = 1;
if(hitme == 1){
wantingtobeclick = 0;
hitme = 0;
return true;
}
return false;
}
public void actionPerformed(ActionEvent e) {
if(wantingtobeclick == 1){
if (e.getSource() == HitMe){
hitme = 1;
g.hitMe(player1);
}
if(e.getSource() == Stand){
hitme = 1;
g.changestandhit();
}
}
}
答案 2 :(得分:0)
只需一个按钮和一些状态变量就可以实现没有while循环:
我在这里做了一点小提琴:http://jsbin.com/uyetat/2/edit
代码是:
var elapsed=document.getElementById('timeElapsed');
var switcher = document.getElementById('switcher');
var timerStarted = false;
var refreshInterval = null ;
var timeStarted = 0 ;
function switchTimer() {
if (timerStarted) {
timerStarted = false;
clearInterval(refreshInterval);
switcher.value = "start";
} else {
timeStarted = Date.now();
refreshInterval = setInterval (refresh, 100);
timerStarted=true;
switcher.value = "stop";
}
}
function refresh() {
elapsed.value = (Date.now() - timeStarted);
}
html正文是:
<output id='timeElapsed' >not started
</output>
<button onclick='switchTimer()' >
<output id='switcher' >Start </output>
</button>
Rq:如果您愿意,可以使用mousedown / mouseup事件并测量保持时间。
答案 3 :(得分:0)
最近我一直在寻找相同问题的答案,但由于找不到满意的答案,因此可以按以下方式进行处理。希望这将对将来遇到同样问题的任何人有所帮助。请注意,我是一个初学者,所以可能会有更好的方法来处理它。就是说-确实达到了预期的效果-停止了循环直到按下按钮。在下面的示例中,我使用for循环,但是它与while一样有效。
技巧是引用GUI,该GUI在单独的线程中运行,然后在后端运行,并与此线程同步循环。为了示例的目的,下面当然是简化的。该代码显示带有1个按钮的框架,这会增加每次单击的计数。
public static void main(String[] args) {
var button = new JButton("loop");
button.setPreferredSize(new Dimension(400, 200));
//create frame thread
Runnable frameThread = new Runnable() {
@Override
public void run() {
var frame = new JFrame("Wait Example");
frame.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
};
//create action listener for button
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
synchronized (frameThread) {
frameThread.notifyAll();
}
}
});
//run frame thread
EventQueue.invokeLater(frameThread);
//loop synchronized with frame thread
for (int i = 1; i < 10; i++) {
synchronized (frameThread){
button.setText(Integer.toString(i));
try {
frameThread.wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
}