|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.03.2013, 15:27 | #1 |
Пользователь
Регистрация: 13.11.2009
Сообщений: 60
|
repaint applet
Доброго времени суток, я в java новичок. По долгу учебы приходится выполнять практические задания, так вот одно из них - написание простой игры (реализация апплетом).
Что такое апплет я знаю, как с ним работать тоже, но вопрос следующий: всю логику приложения я решил реализовать в классе Game, в конструкторе класса апплета создаю экземпляр Game, в init - вызываю старт, в stop - пауза и тд. вот здесь я и столкнулся с вопросом рендеринга, а именно как мне прорисовывать форму, для себя я выбрал два варианта: 1. при создании экземпляра Game в конструктор внедрять зависимость типа Applet и передавать ссылку на класс приложения 2. в классе Game создать событие типа onRepaint, подписать на него апплет и вызывать game.render(g) в обработчике события? Подскажите наилучший вариант или направьте в нужное русло, заранее спасибо... Последний раз редактировалось Dmitry333; 18.03.2013 в 15:45. |
19.03.2013, 22:10 | #2 |
Пользователь
Регистрация: 22.03.2012
Сообщений: 26
|
Знаете, мне профессор как то сказал что апплеты мертвы, но я все же немного поработал,ради интереса. Скажите для начала, умеете ли вы осуществлять двойную буфферизацию, для игры она понадобится, затем необходимо создать классы, которые будут содержать информацию о графических обьектах, после переопределить метод рисования так, что бы он мог вытаскивать из, выше указанных, классов информацию и выполнять отрисовку по ней, и, конечно, необходим массив этих классов. При переборе массива в рисовании for each вам в помощь. Кстати , лучше создать класс наследник апплета , который будет уметь рисовать так ,как необходимо, а затем наследовать его.
Что же касается логики , то ей в таком случае надо передать ссылку на массив обьектов , указанных выше, тогда это будет прекрасно работать. Хотя лично мне непонятно зачем в простой игре выносить логику отдельно. Если бы вы поток создали для параллельной работы примитивной физики, я бы это понял, но так не особо, простые приложения лучше не разбивать на два класса. Последний раз редактировалось Neketek; 19.03.2013 в 22:19. |
19.03.2013, 22:12 | #3 |
Пользователь
Регистрация: 22.03.2012
Сообщений: 26
|
Сложно но , это универсальный метод. Для определения типа обьекта используйте оператор обьект instanseof тип , возвращает булеан.
|
19.03.2013, 23:06 | #4 |
Пользователь
Регистрация: 13.11.2009
Сообщений: 60
|
спасибо за содержательный ответ) насчет instanseof - как-то по детски, можно просто для всех объектов интерфейс прикрутить и полиморфно вызывать ну например render()
|
19.03.2013, 23:13 | #5 |
Пользователь
Регистрация: 13.11.2009
Сообщений: 60
|
ну ладно с графикой, я так подумал, никто от меня её так уж сильно не требует, поэтому решил обойтись просто созданием компонентов )) но тут проблемка нарисовалась, не обновляется форма (( вот код апплета
PS смысл игры - найти правильную кнопку за ограниченное время и нажить на неё, тогда следующий уровень и количество кнопок увеличивается и тд. Код:
переопределенная кнопка Код:
|
20.03.2013, 04:19 | #6 |
Пользователь
Регистрация: 22.03.2012
Сообщений: 26
|
Не люблю джавовские компоненты интерфейса , пользуюсь собственными , но в вашем случае, советую обновлять панель на которой вы это все рисуете, а не апплет, и если уж обновляете апплет, то используйте this.update() а не super update(). Функция обновления как по мне лучше выглядит в виде
Код:
Код:
затем добавил бы слушатель мыши где вызывал бы получение обьекта с помощью вышеуказанной функции затем, затем перекрашивал квадратик в необходимый цвет и обновлял окно , как по мне это решит множество проблем , связанных с обновление и рисованием в форме, тем более, что форма не понадобится , если же вам принципиально необходимо использовать панель , то советую внимательно просмотреть ее методы, если память мне не изменяет, то она имеет собственный метод перерисовки, еще вы можете наследовать Canvas и там задать функции изменения фона по нажатию на них мышкой , позволяет создать отличный для вашей задачи способ решения. |
20.03.2013, 09:37 | #7 | |
Пользователь
Регистрация: 13.11.2009
Сообщений: 60
|
Цитата:
я использую панель, чтобы сгруппировать компоненты, мне необходимо чтобы игровое поле было сверху - эта та панель которая сейчас есть, а ниже - панель состояния, там будет прогресбар и лейбл с текущим уровнем, (это кстати тоже вопрос, как разместить панели чтобы одна была сверху на 70%, а вторая ниже на все остальное пространство). Ваш вариант я тоже продумывал, но дело в том что мне нужно сделать проще и быстрее, а не писать свои объекты, алгоритмы прорисовки в другом потоке и двойную буферизацию |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Java Applet с содержимым веб-страницы | motorway | Общие вопросы по Java, Java SE, Kotlin | 0 | 25.01.2013 00:00 |
Динамическое добавление компонентов (Проблема с repaint) | BleStaR | Общие вопросы по Java, Java SE, Kotlin | 1 | 20.01.2011 16:52 |
Использование метода repaint() объекта класса JPanel | Alexcomeback | Общие вопросы по Java, Java SE, Kotlin | 1 | 31.10.2010 13:12 |
проблема с repaint | serguy | Общие вопросы Delphi | 2 | 27.05.2010 23:27 |
Applet | Mitron | Общие вопросы по Java, Java SE, Kotlin | 0 | 13.04.2008 17:59 |