2016-10-22 4 views
0

Ich versuche ein Memory-Spiel zu machen und habe ein kleines Problem, wenn ich zwei Karten drehen will, um für den Spieler angezeigt zu werden.Zweite Karte im Speicher wird nicht aufgedeckt

Die Sache, die passiert, wenn ich mein Gedächtnisspiel starte, ist, dass die ersten Karten korrekt angezeigt werden, aber wenn ich auf die zweite Karte klicke, bleibt sie verdeckt, es sei denn, es ist ein Paar.

if (model.getCard(tile.getNr()).getCardState() == CardState.DOWN) { 
       model.getCard(tile.getNr()).setCardState(CardState.UP); 
       tile.setImg(model.getCard(tile.getNr()).getValue()); //sets the correct image onto the card 
       click--; 
       //test if equal 
       if (click == 0) { 
        for (Cards card1 : cards) { 
         if (card1.getCardState() == CardState.UP) { 
          if (tile.getNr() != cards.indexOf(card1)) { 
           if (model.getCard(tile.getNr()).getValue() == card1.getValue()) { 
            //if both cards are equal, set them both to paired 
            model.getCard(tile.getNr()).setCardState(CardState.PAIRED); 
            model.getCard(cards.indexOf(card1)).setCardState(CardState.PAIRED); 
            click = 2; 
           } 
          } 
         } 
        } 

        try { 
         Thread.sleep(500);     //1000 milliseconds is one second. 
        } catch (InterruptedException ex) { 
         Thread.currentThread().interrupt(); 
        } 
        for (Cards card1 : cards) { 
         if (card1.getCardState() != CardState.PAIRED && card1.getCardState() == CardState.UP) { 
          model.getCard(cards.indexOf(card1)).setCardState(CardState.DOWN); 
          tiles.get(cards.indexOf(card1)).setCardDown(); 
         } 
        } 
        click = 2; 
       } 
      } 

Ich habe die Verzögerung so der Spieler sowohl der Karten sehen können, bevor sie übergeben.

Vielen Dank für Ihre Hilfe!

Antwort

1

Mit Thread.sleep(500); blockieren Sie den Anwendungsthread, der verhindert, dass die Benutzeroberfläche aktualisiert wird. Sie müssen so warten, dass der Anwendungsthread fortgesetzt werden kann, z. mit PauseTransition.

if (click == 0) { 
    ... turn card face up ... 

    PauseTransition transition = new PauseTransition(Duration.millis(500)); 
    transition.setOnFinished(evt -> { 
     ... turn cards face down ... 
    }); 
    transition.play(); 
} 
+0

Dank! Das hat mein Problem gelöst! – ZeppRock

Verwandte Themen