我正在使用java编写Memory游戏。一切正常,但当我想转第二张牌时,它什么都不做。我需要看到这张卡至少一秒钟,但睡眠命令不起作用。有谁知道该怎么办?
package MatchJavaFX;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
public class TheHandler implements EventHandler<MouseEvent> {
int player1Score;
int player2Score;
boolean player1 = true;
ObservableList<Node> selectedPane_1_Label;
ObservableList<Node> selectedPane_2_Label;
Pane selectedPane1;
Pane selectedPane2;
int count = 0;
@Override
public void handle(MouseEvent t) {
Node selected = (Node) t.getTarget();
if (selected instanceof Pane) {
count++;
if (count %2==1) { //prvni klik
selectedPane1 = (Pane) selected; // vybere policko
selectedPane_1_Label = selectedPane1.getChildren(); //vezme info z policka
if (selectedPane_1_Label.get(0) instanceof Label)
{
((Label) selectedPane_1_Label.get(0)).setVisible(true); // "otoci kartu"
}
} else if (count %2== 0) { // druhy klik
selectedPane2 = (Pane) selected; // vybere policko
selectedPane_2_Label = selectedPane2.getChildren(); //vezme info z policka
if (selectedPane_2_Label.get(0) instanceof Label)
{
((Label) selectedPane_2_Label.get(0)).setVisible(true); // melo by otocit druhou kartu ?? --- THIS DOESNT WORK ?
}
// pokud se policka rovnaji tak :
if (((Label) selectedPane_1_Label.get(0)).getId().equals(((Label) selectedPane_2_Label.get(0)).getId())) {
((Label) selectedPane_1_Label.get(0)).setVisible(true); // ponecha viditelnou kartu
((Label) selectedPane_2_Label.get(0)).setVisible(true); // ponecha viditelnou kartu
if (player1) { // hraje hrac 1
player1Score++; // ricteni k jeho skore (pokud otoci dve stejne karty)
player1 = false;
MainJavaFX.score.setText("HRAC1 = " + player1Score + " - HRAC2 = " + player2Score);
MainJavaFX.status.setText("Hraje HRAC2:"); // change to player 2
checkWinner(); // konec hry ?
} else { // else hraje hrac 1
player2Score++; // pricteni k jeho skore (pokud otoci dve stejne karty)
player1 = true;
MainJavaFX.score.setText("HRAC1 = " + player1Score + " - HRAC2 = " + player2Score);
MainJavaFX.status.setText("Hraje HRAC1:"); // change to player 1
checkWinner();// konec hry ?
}
} else { // else pokud se ty 2 karty nerovnaji
/*try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
((Label) selectedPane_1_Label.get(0)).setVisible(false); // schova kartu
((Label) selectedPane_2_Label.get(0)).setVisible(false);
if (player1) { // hraje hrac 1
player1 = false;
MainJavaFX.status.setText("Hraje HRAC2:"); // prepne na hrace 2
checkWinner(); // konec hry ?
} else { // hrac 2 hraje
player1 = true;
MainJavaFX.status.setText("Hraje HRAC1:"); // prepne na hrace 1
checkWinner(); //konec hry ?
}
}
MainJavaFX.status.setAlignment(Pos.CENTER);
}
}
}
void checkWinner() { // pokud hra skonci
if (player1Score + player2Score == MainJavaFX.gridSize * 2) { // if score = number of labels
if (player1Score > player2Score) // porovnani skore
{
MainJavaFX.status.setText("Vyhral HRAC1");
} else if (player1Score < player2Score) // porovnani skore
{
MainJavaFX.status.setText("Vyhral HRAC2");
} else if (player1Score == player2Score) // stejne skore
{
MainJavaFX.status.setText("Nerozhodne");
}
}
}
}
答案 0 :(得分:0)
可能会改变
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
到这个
Timeline hideAfter1sec = new Timeline(
new KeyFrame(Duration.seconds(1), sec->{
((Label) selectedPane_1.Label.get(0)).setVisible(false);
((Label) selectedPane_2.Label.get(0)).setVisible(false);
})
);
hideAfter1sec.playFromStart();
可以提供帮助。
由于我不太清楚你在某些方面做了什么,所以我删掉了一些可能与你想要完成的事情类似的东西。
所以也许你可以检查它,并可能得到一些想法,做另外一种做你正在做的事情的方法: