Метод repaint () в Java не будет перекрашивать мой Rectangle после перевода - PullRequest
0 голосов
/ 12 марта 2012

Я создаю игру, в которой мне нужно перемещать маленькие квадраты по n на n сетке, и они должны плавно переходить.Это метод обмена, который я сделал, который должен быть в состоянии нарисовать мой переход на экране, но по какой-то причине он этого не делает.Я попробовал гораздо более простую версию своего кода в простом проекте, чтобы переместить Square вперед и назад, и это сработало как шарм, поэтому я действительно не уверен, почему это не перерисовывается.Это всего лишь часть моего кода, поэтому, если в моем коде есть какие-либо сомнения, спросите об этом.

Заранее спасибо.(:

public void swap( int y,  int x ) {
    long time = System.currentTimeMillis();
    int counter = 0;
    swapNum = tiles[y][x];
    rect = (Rectangle) rectangles[y][x].clone();

    while(counter < rect.height) {
        if(System.currentTimeMillis() - time > 5) {
        rect.translate(this.y-y, this.x-x);
        time = System.currentTimeMillis();
        counter++;
        repaint();

        }

    }
    swapNum = 0;
    rect = new Rectangle();


    int temporary = tiles[this.y][this.x];
    tiles[this.y][this.x] = tiles[y][x];
    tiles[y][x] = temporary;
    this.x = x;
    this.y = y; 

}

1 Ответ

1 голос
/ 12 марта 2012

Если этот блок кода выполняется в потоке Event / Dispatch, который используется для рисования на экране, это заблокирует обновление экрана.

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

Java3D имеет встроенную анимацию, поэтому, возможно, стоит посмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...