Java - простая анимация вращения - PullRequest
0 голосов
/ 12 декабря 2018

Я новичок в том, что касается Java, и я столкнулся с проблемой, решение которой пока не нашел.Дело в том, что у меня есть рабочие методы для рисования буквы, а также для ее вращения - когда я устанавливаю вращение, оно работает так, как должно.Однако я хотел бы сделать это немного более интерактивным, в школе нам дали базовую основу для этого - я смог создать кнопку, которая при нажатии на нее меняет угол буквы и правильно перерисовывается.Но я бы хотел сделать это анимацией, например, если вы нажмете кнопку, и в течение 10 секунд (или до тех пор, пока вы не нажмете кнопку снова), буква будет вращаться.

В интернете я нашел способ выполнить действие через определенный промежуток времени, и я подумал, что буду использовать это.Я хотел добавить угол и перерисовать изображение, скажем, через 1 секунду, затем оно повторилось бы - я думал, что это заставит его выглядеть как анимированный.Но я был неправ.Я попробовал так много способов сделать это, лучше всего было то, что после нескольких секунд, которые я установил, я хочу, чтобы анимация работала, она меняла угол и перерисовывал, к сожалению, это было конечное состояние, и оно не рисовало состояния междусоздать анимацию.И этот последний код даже не делает этого, программа просто зависает.

int animation = 0;
int steps = 0;

public void G_draw() {
        graphic.clear();
        if (animace==1)
        {
            animation();
        }

        letter('a', G_Color.G_cBlack, 2, 2);//drawing an letter
}

public void G_mousePressed(G_Button button, int x, int y) {
    if (button.equals(G_Button.B_LEFT)&&x>700&&x<750&&y>500&&y<520){
            animation=1;
            G_draw();
        }
}

public void animation() {
        long start = System.currentTimeMillis();
        long end = start + 2 * 1000; 
        while (System.currentTimeMillis() < end) {

        }
        langle+=30; // adding an angle
        steps++;

        G_repaint();
        G_draw();
        if (steps<4) animace();
}

1 Ответ

0 голосов
/ 13 декабря 2018

вместо этого

long start = System.currentTimeMillis();
        long end = start + 2 * 1000; 
        while (System.currentTimeMillis() < end) {

        }

использовать
Thread.sleep(# in milliseconds);
Мы не можем видеть, где вы используете langle
Эта строка if (steps<4) animace(); работает только тогда, когда animace<>1, иначе этопропущено, потому что animate () вызывает G_draw (), вызывает animate и так далее.

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