Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: GUI и Java FX приложения > Какой Layout выбрать для игры "колобок" ? |
Автор: Wowa 21.5.2006, 02:19 |
Какой Layout выбрать для игры "колобок" ? Будет колобок, который передвигается по 2Д лабиринту. |
Автор: boevik 21.5.2006, 07:22 |
Если не графика, то BorderLayot. |
Автор: Wowa 21.5.2006, 09:37 | ||
Т.е. не графика? Графика конечно, хоть и примитивная. Добавлено @ 09:39 Если брать BorderLayot, то получается, что лабиринк и колобка надо в центр засовывать, но как сделать тогда передвижение рисунка. Можно ли как-то координаты его задавать?
|
Автор: LSD 21.5.2006, 10:35 |
Если ты сам будешь двигать колобка, то от LayoutManager придется отказаться. И управлять координатами вручную. |
Автор: Wowa 21.5.2006, 10:53 |
А нельзя ли взять BorderLayot, но в центре(там где игровое поле будет) указывать координаты вручную? Насколько кстати распространены случаи, когда приходится отказываться от LayoutManager? |
Автор: Wowa 21.5.2006, 12:26 | ||||
Я тоже думал об этом, но идет ругань на строчку:
Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container at java.awt.Container.addImpl(Unknown Source) at java.awt.Container.add(Unknown Source) at GUI.init(GUI.java:97) at ххх.main(ххх.java:45) |
Автор: LSD 21.5.2006, 12:33 |
Он ругается не на это. Судя по всему у тебя game_frame окно (JFrame, JWindow или еще что подобное). А ты пытаешься засунуть его в контейнер, так делать нельзя. Окно нельзя добавить ни в какой другой компонент, оно должно самостоятельно отображаться на экране. Замени окно на панель. |
Автор: Wowa 21.5.2006, 15:07 | ||
В Лабиринте ведь будут стены, всякие сюрпризы и т.п. Не проще ли взять GridBagLayout для JPanel с полем игры? |
Автор: LSD 21.5.2006, 15:49 | ||||
С точки зрения производительности, лучше один раз отрендерить картинку с полем. А затем рисовать ее в качесве фона панели. Просто двигать колобка в контейнере с GridBagLayout, можно только меняе его GridBagConstraints. А так можно получить только движение по клеткам. Добавлено @ 15:51 Отрендерить картинку можно например так:
|
Автор: Wowa 21.5.2006, 21:40 | ||
А потом расставить элементы и колобка на поле без использования LayoutManager? Как мне тогда можно определить, что колобок движется, например, в стенку? В массиве нужно хранить все объекты на поле и их координаты получается. Так ? |
Автор: Goliath 21.5.2006, 22:07 |
Я когда-то писал подобное. Я делал следующим образом: 1. Делал сетку из квадратов, если изометрия то из ромбиков. 2. Брал двухмерный массив индексы соответствовали каждому графическому квадратику, а значение тип преграды. Например 1 – стена, 2 вода и т.д 3. Определил передвижение юнита и делал проверку на его место положение. 4. Если он натыкался на преграду определял тип и делал необходимые действия Если нужен код могу поискать и выложить его. |
Автор: LSD 21.5.2006, 22:08 | ||
По идее да. У тебя есть некая карта, которая описывает как расставлены элементы лабиринта, на ее основе ты создаешь MazePanel и генерируешь "карту проходимости". В простейшем варианте, можно представить карту в виде клеток и для каждой простосто определить проходима она или нет. Колобок может находится, строго по центру одной клетки. Исключение момент перехода из одной клетки в другую, в этот момент он занимает 2 клетки и отображается где-то посередине. Приблизительно такая схема была реализована в WarCraft II. |
Автор: Goliath 21.5.2006, 22:16 | ||
На самом деле передвижение делается легко и не нужно привязываться к карте, он просто движется плавно по ее поверхности, а при движение мы определяем на что он наткнулся и делаем обход или атаку и т.д |
Автор: Samuil 24.5.2006, 12:10 |
Блин а не проше все далать в методе pain()? и никаких проблем у Вас не будет ![]() |
Автор: Zandr 26.5.2006, 13:51 |
проблем не будет, будет pain ![]() Об paint() и идет уже разговор насколько я понял. |