java - 定时器和loop()/noLoop()的问题

标签 java timer processing

我正在尝试在我的程序中编写一个函数,当单击鼠标时,该函数将暂停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/

相关文章:

java - 处理Java,如何切换全屏?

Java 枚举构造函数未定义

java - 单击任意位置时关闭 Activity

c# Timer 没有按预期工作,请参见下面的示例

JavaEE定时器服务

java - 保存帧并使用处理 2 将它们放入网格中

java - 在 IntelliJ 中使用 build.sbt 排除 JAR 文件中的依赖项签名文件

java - 如何制作一个永远不会选择两次相同图像的功能

c# - 在c#中创建时间事件

javascript - Canvas 自动调整为 50x50