2013-07-04 2 views
1

Я собираюсь написать анимацию, в которой символ на JPanel перемещается влево/вправо, когда пользователь нажимает (и удерживает) соответствующие клавиши.Правильный подход параллелизма к анимации качания?

Теперь, поскольку я новичок в concurrency Я хочу спросить: должен ли код обрабатывать анимацию (а именно метод, который будет перемещать и перерисовывать символ до тех пор, пока ключ удерживается) исполняться на рабочем потоке или поток отправки событий?

Я читал учебники по параллельности в swing, и кажется, что материал, который изменяет компоненты (в данном случае это картина JPanel) должно быть на обработке потоков события, но с другой стороны, что бы заморозить все другие события до тех пор, пока ключ будет удерживаться правильно?

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

Спасибо заранее!

+0

, если вы собираетесь использовать неявно, простой подход к потоку поможет, потому что нет никаких конфликтов между базовым потоком и ваша нить, как [это] (http://arashmd.blogspot.com/2013/07/java-thread-example.html#lc) –

ответ

1

Все рисунки Картины должны быть выполнены по резьбе EDT. Никогда в другой теме. Используйте SwingUtilities.invokeLater() .. для вашей картины. Вы можете делать вычисления, как то, что будет следующим положением вашего персонажа в Worker Thread. У вас не будет никакой безответственности, если вы будете создавать и использовать Swing Classes на EDT. просто убедитесь, что ваши вычисления не слишком длинны. Для анимации всякий раз, когда вы находите следующий позитив своего персонажа, просто вызывайте SwingUtilties.invokeLater, чтобы обновлять изменения в UI

+0

Хорошо, спасибо, что вы это поняли. Еще одна вещь, чтобы быть уверенным: «по моему вычислению» вы имеете в виду только код, вычисляющий, где символ будет в следующем кадре правильно? – MountainThatCodes

+0

Да, по расчету я имел в виду только это. – veritas

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