Как использовать Thread.sleep, чтобы показать простую анимацию сброса? - PullRequest
1 голос
/ 02 апреля 2011

Я делаю игровую доску и хочу показать анимацию игровой доски, Анимация - это объект, падающий вот так:


время = 0
○○○
○○○
○○○
○○○
время = 1
● ○○
○○○
○○○
○○○
время = 2
● ○○
● ○○
○○○
○○○
время = 3
● ○○
● ○○
● ○○
○○○
время = 4
● ○○
● ○○
● ○○
● ○○


 for (int row = 0; row < ROW_MAX; row++) {
      for (int col = 0; col < COLUMN_MAX; col++) {
          TempBoard[row][col]= hollow;
       }
 }
drawBoard(TempBoard);
Thread.sleep(1000);
TempBoard[0][column] = solid;
drawBoard(TempBoard);
Thread.sleep(1000);
TempBoard[1][column] = solid;
drawBoard(TempBoard);
Thread.sleep(1000);
TempBoard[2][column] = solid;
drawBoard(TempBoard);
Thread.sleep(100);
TempBoard[3][column] = solid;
drawBoard(TempBoard);
Thread.sleep(1000);

Но я не могу получить то, что хочу, он показывает время = 4 и пропустил шаги во времени = 0-3, в чем проблема? Как я могу это исправить? Или любой другой простой способ сделать это? Thankyou.
Метод drawBoard:

public void drawBoard(Disc[][] updateBoard) {
    Disc[][] tempBoard = updateBoard;
    for (int row = 0; row < ROW_MAX; row++) {
        for (int col = 0; col < COLUMN_MAX; col++) {
            if (tempBoard[row][col] == hollow) {
                //jbtBoard[row][col].setIcon(hollowImg);
                System.out.println(hollow);
            } else if (tempDisc[row][col] == solid) {
                //jbtBoard[row][col].setIcon(solidImg);
                System.out.println(solid);
        }
    }
}

Однако, когда я запускаю код, вывод будет таким:


время = 0,1,2,3
○○○
○○○
○○○
○○○
время = 4
● ○○
● ○○
● ○○
● ○○


Ответы [ 2 ]

5 голосов
/ 02 апреля 2011

Если вы делаете это (в пределах одного обратного вызова) в потоке пользовательского интерфейса, процедура будет выполняться, как вы сказали, но поток пользовательского интерфейса сможет отображать только те команды рисования, которые вы дадите, после того, как ваш код завершит работу, что фактически означаетпоказ версии 4.

0 голосов
/ 02 апреля 2011

Вы не должны использовать Thread.sleep ().

Вам следует использовать Swing Timer .

...