我正在尝试在我的程序中编写一个函数,当单击鼠标时,该函数将暂停draw() 3 秒。当计时器经过 3 秒时,draw() 应该恢复,但事实并非如此。
Deck playerDeck;
Deck computerDeck;
PFont font;
int timer; //use this to allow cards to stay drawn for 2 or 3 seconds
int cardsLeft = 52;
**int savedTime;
int totalTime = 3000;** //milliseconds
void setup(){
size(500,500);
frameRate(30);
playerDeck = new Deck(true,215,364,71,96);
computerDeck = new Deck(false,215,40,71,96);
font = loadFont("TimesNewRomanPSMT-20.vlw");
textFont(font, 20);
textAlign(CENTER);
**savedTime = millis();**
}
void draw(){
background(255);
//draws the players' decks
playerDeck.drawDeck();
computerDeck.drawDeck();
//informative text
fill(0);
text("Player",width/2,493);
text("Computer",width/2,27);
text(cardsLeft + " Cards left",width/2,height/2+5);
}
void mousePressed(){
if(cardsLeft > 0){ //checks cards left aka clicks, limited to 52- size of deck
if(playerDeck.deckClicked(mouseX,mouseY)){//checks if player deck is clicked
println("You picked a card from your deck");
playerDeck.drawCardAndCompare();//draws a random card for the player from a 2d array suit->card
computerDeck.drawCardAndCompare();//draws a random card for the computer from a 2d array suit->card.
cardsLeft--;
} else if(computerDeck.deckClicked(mouseX,mouseY)){//checks if the player clicked the computers deck. no need for computer interactivity so computer and player draws are simultaneous
println("You can't take cards from the computer's deck!");
} else {
println("Click on your deck to pick a card");//if the player clicks elsewhere
}
} else {
println("Game over"); //when cards left / clicks equals or is less then 0
}
**noLoop();**
}
**void mouseReleased(){
int passedTime = millis() - savedTime;
if(passedTime > totalTime){
loop();
savedTime = millis();
}
}**
按下鼠标后,屏幕上会绘制一些图像。释放鼠标后,计时器应设置为 3 秒,三秒过后,它会激活 Loop() 来绘制图像。这里的问题是,按住鼠标按钮 3 秒然后释放将激活循环(),或者如果您在三秒之前释放鼠标按钮,则再次单击。如果我不清楚,我很抱歉,我现在真的很累,但需要完成这项工作。
最佳答案
当鼠标松开时,你可以让主线程 hibernate 3 秒。时间过后,它应该恢复。将您的事件处理程序更改为:
@Override
public void mouseReleased(MouseEvent e) {
try {
Thread.sleep(3000);
//thread will then resume
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
关于java - 定时器和loop()/noLoop()的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20116768/