마우스를 클릭 할 때 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 초 전에 마우스 버튼을 놓으면 다시 클릭한다는 것입니다. 미안하지만 내가 분명하지 않다면, 나는 지금 정말로 지쳤다. 그러나이 일을 끝내야한다.
millis() savedTime 및 mp는 무엇입니까? 더 많은 코드를 보여줘야합니다. – Sionnach733
millis()는 프로그램이 시작된 이래로 밀리 초 단위로 시간을 저장하는 내장 함수입니다. mp는 이전 코드 였지만 출력에 영향을 미치지 않았고 출력에 영향을 미치지 않으며, savedTime은 int이고 맨 위에 있습니다. –
이미 해결책을 얻었지만 코드가 작동하지 않는 이유는 다음과 같습니다. 마우스를 놓을 때'passedTime> totalTime'을 한 번만 확인합니다. 조건을 true로 설정할 때까지 루프 구조에 넣어야합니다. 한번 확인하고 끝내기 만하면됩니다. – kevinsa5