Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Анимация движения по дуге


Автор: Codemancer 9.12.2008, 23:21
Уважаемые форумчане, помогите решить следующую проблему. В приложение на Canvas рисуется дуга стандартным методом явы. Далее рисуется круг, опять же стандартной функцией. Необходимо создать анимацию движения круга по заданной дуге.
Код

...
g.drawArc(getX1(), getY1()-getR(), getX2()-getX1(), 2*getR(), 0, -180); //Дуга, с радиусом 20, вписанная в квадрат со стороной 40
...
g.drawOval(element[2].getX1() - 2 * dX - 1 + k, element[2].getY1() - 2 * dY + 2*k, 4 * dX , 4 * dY); // Это окружность, вписанная в квадрат 
...


Анимацию этой же окружности по прямой делал следующим образом 
Код

for(...)
{
Thread.sleep(20);
g.clearRect(element[j].getX1() - 2 * dX - 1, element[j].getY1() - 2 * dY - k + 2, 4 * dX+1, 4 * dY+1 );
g.drawOval(element[j].getX1() - 2 * dX - 1, element[j].getY1() - 2 * dY - k, 4 * dX , 4 * dY);
...
}


здесь в массиве элементов element[j] хранятся координаты начала и конца элементов. Для дуг еще добавляется радиус. Соответственно, отрисвовывется кажде 20мс окружность, потом перемещается на новое место (на 1 вперед), а старае стирается. Но с дугой этот подход не сработает. Что посоветует?

Автор: math64 12.12.2008, 09:22
Используй двойную буферизацию и рисуй всё вместо того, чтобы стирать старое и рисовать новое. При наличии полос прокрутки можно рисовать только то, что попадёт на экран. Наследуйся от Component, а не от Canvas, который расчитан на работу с компонентами AWT, а не Swing. При наследовании от Component можно пользоваться и AWT, и Swing.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)