остановить анимацию в Java-апплете по щелчку мыши - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть следующий сценарий: если у меня есть блок while в методе paint() (используется, например, для симуляции простой анимации, такой как вращение многоугольника, выполненного с помощью многократного рисования и стирания фигуры), есть ли способ сломать блок while, если щелкнуть мышью внутри апплета?

Анимация многоугольника выполняется без вызова метода paint(). Также было бы возможно сделать это, если бы блок while выглядел примерно так:

while (count<n)
{
    //code that draws the polygon rotating
    count++;
}

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Не используйте цикл while.

Вместо этого используйте Swing Timer для планирования анимации.Затем вы можете просто запустить / остановить таймер по мере необходимости.

1 голос
/ 11 ноября 2011

Да, есть сценарий для удержания вашего цикла while.

Самый простой способ - установить переменную в вашем файле класса private boolean stopLoop=false и в проверке цикла while для этого атрибута while (!stopLoop).

Теперь MouseEvent просто установил атрибут stopLoop=true и все готово (если вам нужна помощь, вот вам Как написать слушателя мыши

Другое решениеиспользует Swing Timer, как упомянуто @camickr (см. другой ответ). Предположим, у вас есть общий метод Timer вне вашего paint() метода. Тогда вы не должны использовать цикл while. Я бы предложил просто нарисовать статическийи если вы хотите, чтобы ваш полигон вращался, просто нарисуйте следующий, но с другим углом и т. д.

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

Если у вас есть дополнительные вопросы, пожалуйста, добавьте больше подробностей, или bedder покажите нам минимизированныйкод.

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