2013-08-02 6 views
0

Я кодирую игру; что-то вроде этого: http://i.stack.imgur.com/HBrEE.pngКачающаяся графика в многопоточной программе

У меня есть класс с именем Canvas, который расширяет JLabel и переопределяет paintComponent(), ставит изображение линий сетки в качестве фона, затем рисует игрока и препятствия (стены).

Используя createGraphics(), я получаю объект Graphics2D. Мне нужно это, чтобы нарисовать оружие и пули из их классов. (Как вы видите, есть несколько видов оружия, которые снимают пули в определенные промежутки времени.)

Для реализации всех этих целей, используя SwingUtilities.invokeLater(), я рисую линии сетки, игрока и стены в классе Canvas. Я думал создать нить за оружие и по одной на пулю; Я знаю, это чересчур, но поскольку я новичок в многопоточности, у меня нет других идей!

И еще одна проблема с объектом Graphics2D: мне нужно разделить этот объект между потоками, поэтому я подумал об использовании ключевого слова final; но это невозможно, потому что значение объекта Graphics2D будет определено в paintComponent().

Заранее благодарим за любую помощь, которую вы можете предоставить.

ответ

3

Нельзя использовать многопоточные потоки рендеринга когда-либо (ну, по крайней мере, в 99% случаев). Большинство графических программ сохраняют полное состояние сцены в каком-либо дереве объектов, которое только один поток отображает так часто (1/60-е секунды). Поток рендеринга проходит через каждый объект в дереве рендеринга и вызывается .paint или что-то еще, чтобы объект был нарисован. Прополощите и повторите, и все готово.

+0

Поэтому я должен сделать всю картину в одном потоке, и больше не нужно будет пропускать Graphics2D obejct; Большой! Благодаря! но что, если некоторые объекты, которые необходимо разделить между потоками и сделать их окончательными, невозможно? – Aura

+0

Какой обмен вам нужен? Если вы используете истинный ООП, вам, скорее всего, нужно, чтобы ваши объекты были в лучшей форме. –

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