2010-05-26 1 views
7

Я пытаюсь анимировать шахматный кусок в доске. Сначала я создал объект java.util.Timer, который «scheduleAtFixedRate» TimerTask реализован как прокси-функция. Таким образом, я сохранил запись пьесы для перемещения (запись с частичным движением), и когда она будет подходящей (когда пользователь перемещает кусок с помощью мыши), прокси-функция TimerTask должна быть проверкой, если запись не равна нулю, подвижная функция. Функция смешивания частей только обновляет координаты x и y фигуры, согласно предварительно рассчитанному вектору. Я положил часы-часы на запись-перемещение, поэтому, когда он изменится, он должен перекрасить доску (холст). Метод окраски проверяет, не является ли эта запись с перемещением материала ничтожной, чтобы нарисовать ее.Как сделать анимацию с помощью качелей и clojure?

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

ответ

2

обновлений для компонентов Swing должно быть сделано на тему событий диспетчерское (EDT). Таким образом, вы должны использовать таймер Swing, поскольку любой код, выполняемый при срабатывании таймера, будет выполняться на EDT.

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

Для получения дополнительной информации ознакомьтесь с разделом из учебника Swing по телефону How to Use Timers.

+0

Вы правы, теперь движение работает, но все еще не достаточно гладко, лучше будет проверять таймеры поворота. Спасибо за ответ. –

+0

Вы ** НЕ ** должны использовать ** Swing Timer ** для анимации ваших компонентов. Вы можете настроить таймер с помощью * любой * утилиты, которую хотите, а затем передать исполнение в EDT с помощью ** SwingUtilities.invokeLater ** (или ** invokeAndWait **). – SkyDan

1

Swing не делает анимацию автоматически, неважно, есть ли у вас таймер или нет. Если вы хотите оживить движение, вам нужно перемещать кусок на некоторое расстояние за один раз и перекрашивать холст с каждым движением, поэтому он дает иллюзию, так сказать, о движении.

+0

Это именно то, что я делаю, когда кусок перемещает метод перекраски холста, вызывается через дополнительные часы. –

0

В JDK есть демо-версия Animator. Он использует awt, но он должен дать вам некоторые идеи.

jdk1.6.0_20 \ демо \ апплеты \ Аниматор

1

вы можете использовать Trident библиотека: Here

+0

Должен попробовать, clojure с качелями кажется мне тяжелым. –

0

Другой идеей может быть просмотр структуры визуализации обработки с сайта processing.org. Это простой, но мощный и хорошо документированный язык программирования для анимации и визуализации. API очень прост и имеет очень прозрачную обертку Clojure с именем Rosado.

Смежные вопросы