![]() |
Модераторы: javastic, AntonSaburov |
![]() ![]() ![]() |
|
Gameout |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 8.2.2007 Где: Интернет Репутация: нет Всего: нет |
Добрый день! Поиогите пожалуйста с проблемой!!!
Как правильно и правильно ли если есть в в Мидлете несколько класоов (отдельных файлов), типа Каждый класс (extends Canvas) - это якобы окно приложения. Так вот при переходе с класса на класс (т.е. якобы смене окна) при определенных условиях, правильно ли делать типа Display.setCurrent(***)? для того чтобы у каждого окна было свое управление? Или нужно (можно) как то по другому? Я пока реализовываю свою идею таким способом, но возникает при этом проблема, так как в каждом классе у меня рисуеться новое окно, и пре переходе с класса на класс (смене окон) то хавает по 2 метра оперативы в телефоне!!! Уже пытался и так и сяк всеровно хавает, меньше но хавает и в конце концов телефон с 16 метрами оперативы отдает все и виснит . Перед переходом на след. окно практически все приводил в null, вызывал сборщик мусора все ровно не помогает!!! Подскажите пожалуйста что делать? |
|||
|
||||
Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: 3 Всего: 5 |
Привет!
Нет, это не правильно, поскольку ты сам заметил,что это съедает огромное количество ресурсов. Тебе не нужно иметь по классу на каждое окно. Тебе нужно просто самим это окно перерисовывать. Заводишь один класс extends Canvas и в нем производишь все отрисовки, просто в методе paint() вызываешь соответствующую функцию и передаешь в нее Graphics или как тебе там удобнее. --------------------
|
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Смотря что ты пишешь.
Если игру, то там один GameScreen, но все экраны опций и настроек я например реализовывал в новом окне. Если бизнес-приложение, то каждый вьювер - это отдельный класс. Вот я например писал клиента для сайта знакомств(это было достаточно большое приложение и м), представляешь сколько там экранов? сводить это к процедурному программированию это рано или поздно зафакапить проект. Тем более сейчас телефоны уже получше чем были ранее.. Вот в данный момент тож пишу так же. Мое приложение работает нормально на Motorola c350, хотя это не настолько быстрый телефон. и памяти столько не кушает. Может код покажешь как ты делаешь именно отрисовку экрана и эти переходы? -------------------- iOS developer |
|||
|
||||
Gameout |
|
||||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 8.2.2007 Где: Интернет Репутация: нет Всего: нет |
Код мидлета такой:
При старте мидлета он переходит к классу MyCanvas и начинает там свою работу(Рисуеться меню). Код MyCanvas:
В этом месте я создал класс для рисования меню: myMenu.paint(g); Потом класс PMenu
Тут добаляю картинки через InputStream
Потом в классе делаю действие от нажатия типа определенного пункта меню и перехожу допустим в другой класс(Окно Счет) таким образом
Из меню "Cчет" тоже делаю выход, из этого окна назад в глав меню:
Таким образом сделал и другие!!! И при заходе например в меню "Счет" затем сразу допустим вышел назад на глав меню. Зашел в меню "Об игре" и снова вышел назад и при этом оперативная память телефона просто исчезает когда зайдешь и выйдешь например таким образом. |
||||||||||||
|
|||||||||||||
Dancer |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 29.4.2005 Где: Nizhniy Novgorod Репутация: 33 Всего: 37 |
где -то в интерфейсном классе делаешь объявление своих констант
public static final int SCORE_MENU = 1; ..... ... //действие от нажатия при определенном условии: is = null; img = null; gr = null; System.gc(); MyCanvas.paintWindow(SCORE_MENU); class MyCanvas extends Canvas { private static int repaintID = -1; ..... public static void paintWindow(int windowRepaint) { //можно сделать какие нибудь проверки на валидность ещё repaintID = windowRepaint; repaint(); } protected void paint(Graphics g) { switch(repainID) { case SCORE_MENU: scoreMenu.getInstance().paint(g); break; } } } ну или как-то так. Главное чтобы ты не гонял по 100 раз создание объектов и пихание их в Display.setCurrent() это у тебя и жрёт память. Нужно тебе логику свою продумать до того, как начинаешь кодить. Ты пойми, от того как ты спроектируешь своё приложение так оно у тебя в дальнейшем и будет "жить" ![]() Можешь кинуть весь проект в почту, будет время посмотрю и постараюсь ответить по-полнее, а так из того что ты тут привёл, инфы очень мало. Но дело точно в "голове" ![]() -------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! ![]() |
|||
|
||||
Gameout |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 8.2.2007 Где: Интернет Репутация: нет Всего: нет |
Спасибо!!! Как и куда скинуть? ? ?
|
|||
|
||||
hamsterKSU |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 401 Регистрация: 20.10.2006 Где: Украина, Херсон Репутация: 7 Всего: 11 |
2Gameout что же ты бросил эту тему и начал новую,а нет вижу всетаки воспользовался указаниями
![]() Добавлено через 7 минут и 26 секунд я тебе уже писал - что ты рисуешь при каждой перерисовке в любом случае рисуешь свое первое меню с картинками а потом зарисовываешь его :( вот каждый раз и отжирается дофига памяти. а ты так и не исправил этого. прочитай мой пост в той теме повнимательнее и послушай совета от Dancer, я это и имел ввиду, когда говорю что надо следить за тем что рисуешь сейчас и не рисовать лишнего |
|||
|
||||
hamsterKSU |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 401 Регистрация: 20.10.2006 Где: Украина, Херсон Репутация: 7 Всего: 11 |
||||
|
||||
Dancer |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 29.4.2005 Где: Nizhniy Novgorod Репутация: 33 Всего: 37 |
у каждого форумчанина есть PM, так же если залезть в профиль, то оттуда можно получить "КУДА" ![]() И посмотри линки которые дал hamsterKSU, для "начинающих" - полезно. -------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! ![]() |
|||
|
||||
hamsterKSU |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 401 Регистрация: 20.10.2006 Где: Украина, Херсон Репутация: 7 Всего: 11 |
||||
|
||||
darf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 6.4.2007 Репутация: 1 Всего: 1 |
Если хотите научиться быстро и качественно писать программы на J2ME, есть такая книжка
"Программирование игр для сотовых телефонов на J2ME (+CD)" http://www.piter.com/book/978591180327 Автор - я. Рекомендую ![]() Там рассказывается как сдлелать даже такую мегаигру, как Heroes Of Might and Magic. Или, скажем, отправлять из мидлета SMS вне зависимости от того, какое API для этого поддерживает телефон (ОДНА единственная версия программы, работающая на всех аппаратах). И еще много чего полезного. |
|||
|
||||
javastic |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1214 Регистрация: 18.3.2005 Где: St.Petersburg Репутация: 19 Всего: 27 |
darf, Любавин С. А.?
![]() Добро пожаловать к нам на форум! ![]() Автографы раздаёте? ![]() -------------------- 01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011 scjp, mcp |
|||
|
||||
darf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 6.4.2007 Репутация: 1 Всего: 1 |
Да, это я.
Автографы раздаю, но не на форуме ![]() |
|||
|
||||
![]() ![]() ![]() |
FAQ раздела лежит здесь! |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |