2013-11-21 4 views
0

마우스를 클릭 할 때 draw()를 3 초 동안 일시 중단하는 함수를 프로그램에 작성하려고합니다. 타이머가 3 초를 지나면 draw()가 재개되어야하지만 그렇지 않습니다.타이머 및 loop()/noLoop() 문제

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 초 동안 설정되고 3 초가 지나면 이미지 위에 그림을 그리기 위해 루프()가 활성화됩니다. 여기서 문제는 마우스 버튼을 3 초 이상 누르지 않으면 loop()가 활성화되거나 3 초 전에 마우스 버튼을 놓으면 다시 클릭한다는 것입니다. 미안하지만 내가 분명하지 않다면, 나는 지금 정말로 지쳤다. 그러나이 일을 끝내야한다.

+0

millis() savedTime 및 mp는 무엇입니까? 더 많은 코드를 보여줘야합니다. – Sionnach733

+0

millis()는 프로그램이 시작된 이래로 밀리 초 단위로 시간을 저장하는 내장 함수입니다. mp는 이전 코드 였지만 출력에 영향을 미치지 않았고 출력에 영향을 미치지 않으며, savedTime은 int이고 맨 위에 있습니다. –

+0

이미 해결책을 얻었지만 코드가 작동하지 않는 이유는 다음과 같습니다. 마우스를 놓을 때'passedTime> totalTime'을 한 번만 확인합니다. 조건을 true로 설정할 때까지 루프 구조에 넣어야합니다. 한번 확인하고 끝내기 만하면됩니다. – kevinsa5

답변

1

마우스를 놓을 때 주 스레드가 3 초 동안 잠자기 상태가 될 수 있습니다. 시간이 경과 한 후에 다시 시작해야합니다. 이벤트 처리기를 다음으로 변경하십시오.

@Override 
    public void mouseReleased(MouseEvent e) { 
     try { 
      Thread.sleep(3000); 
      //thread will then resume 
     } catch (InterruptedException e1) { 
      e1.printStackTrace(); 
     } 
    } 
+0

감사합니다. 이것은 내가하려는 일에 관한 것입니다. –