Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расширенное меню 
:(
    Опции темы
Gameout
  Дата 31.3.2007, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 8.2.2007
Где: Интернет

Репутация: нет
Всего: нет



Добрый день! Пишу курсовой на j2me и столкнулся с проблемой!

Создал класс MyCanvas и начал в нем рисовать меню.

Код
class MyCanvas extends Canvas {
     
     private MyCanvas mini;
     private MIDlet midlet;
     private Timer myRefreshTimer = new Timer();
     private TimerTask myRefreshTask;
     Image img;
     InputStream is;
     int getKey;
     int index = 1;
     public MyCanvas( MIDlet midlet ){
          this.midlet = midlet;
     }
//Прорисовщик всего сущего
     protected void paint( Graphics g ){
          this.setFullScreenMode(true);
          
          new PMenu().paint(g);
     }
//Получаю код нажатой клавиши
     public void keyPressed(int keyCode){
          getKey = keyCode;
          Keys(getKey);
//Прорисовываем изменения
          repaint();
     }
//Запуск мидлета
     protected void startApp(Graphics g){
          
          myRefreshTask = new RefreshTask();
          myRefreshTimer.schedule(myRefreshTask, 0, 50);
          repaint();
          
     }
//Объявляю действия которые будут происходить при проиостоновке работы с мидлета (пауза)
     protected void pauseApp(){
     }
//Объявляю действия которые будут происходить при завершении работы с мидлетом
     protected void destroyApp( boolean unconditional ){
          destroyApp(true);
          notifyAll();
     }
//Объявляю класс обновления экрана с помощью таймера
     private class RefreshTask extends TimerTask {
          public void run() {
               
               mini.repaint(0,0,352,416);
               
          }
          
     }
//Узнаю индекс выбранного пункта главного меню
     public int Keys(int KeysNum) {
          
          if (KeysNum == -2) {
               if (index >= 5) {index = 1;} else {index++;}
          }
          if (KeysNum == -1) {
               if (index < 2) {index = 5;} else {index--;}
          }
          
          return index;
     }
//создаю класс для прорисовки главного меню
     private class PMenu {
          private void paint(Graphics gr) {
//Получаем размер активной области экрана
               int x = gr.getClipWidth(); // = 352
               int y = gr.getClipHeight();// = 416
//Получаем координату X для начальной точки прорисовки меню
               int XPositionMenu = (x - 139)/2;
//Получаем координату X для начальной точки прорисовки Main
               int XPositionMain = (x - 200)/2;
//Заливаем экран черным цветом
               gr.setColor(0,0,0);
               gr.fillRect(0,0,352,416);
//Рисуем заглавное меню
               try{
                    is = getClass().getResourceAsStream("/images/Main.png");//Первый миллион
                    gr.drawImage(img.createImage(is),XPositionMain,5,0);
                    
                    is = getClass().getResourceAsStream("/images/menuNewGame.png");//Новая игра
                    gr.drawImage(img.createImage(is),XPositionMenu,134,0);
                    is = getClass().getResourceAsStream("/images/menuScore.png");//Счет
                    gr.drawImage(img.createImage(is),XPositionMenu,171,0);
                    is = getClass().getResourceAsStream("/images/menuHelp.png");//Помощь
                    gr.drawImage(img.createImage(is),XPositionMenu,208,0);
                    is = getClass().getResourceAsStream("/images/menuAbout.png");//Об игре
                    gr.drawImage(img.createImage(is),XPositionMenu,245,0);
                    is = getClass().getResourceAsStream("/images/menuExit.png");//Выход
                    gr.drawImage(img.createImage(is),XPositionMenu,282,0);
                    is.close();
               }catch(IOException ex){}
               
               
               gr.setColor(255,0,0);
               //**//**//**//{
               gr.drawString("" + getKey,0,0,0);
               //**//**//**//}
               
//Выделение чертой выбранный индекс
               switch(index) {
                    case 1:gr.drawLine(XPositionMenu,172,XPositionMenu + 139,172);break;
                    case 2:gr.drawLine(XPositionMenu,209,XPositionMenu + 139,209);break;
                    case 3:gr.drawLine(XPositionMenu,246,XPositionMenu + 139,246);break;
                    case 4:gr.drawLine(XPositionMenu,283,XPositionMenu + 139,283);break;
                    case 5:gr.drawLine(XPositionMenu,320,XPositionMenu + 139,320);break;
               }



//Проверяю на нажатие кнопки ОК с индексом 2, если да то рисую окно с турнирной таблицей
               if(getKey == -5) {
                    if(index == 2) {
                         gr.setColor(255,0,0);
                         gr.fillRect(0,0,352,416);
                         ///***///
                    }
}
//Здесь проблема
          }}
     
}


Ради примера сделал просто
По нажатию на кнопку счет рисуеться новое меню, типа Турнирная доска
Код
 if(getKey == -5) {
                    if(index == 2) {
                         gr.setColor(255,0,0);
                         gr.fillRect(0,0,352,416);
                         ///***///
                    }
}



а теперь проблема как ни пытался сделать чтобы выходило назад в главное меню по нажатию определенной клавиши
Все равно Рисует главное меню по нажатию налюбую клавишу

Мне кажеться что проблема здесь
Код
//Прорисовщик всего сущего
     protected void paint( Graphics g ){
          this.setFullScreenMode(true);
          
          new PMenu().paint(g);
     }


Помогите пожалуйста с этим разобратьсья, может где то ошибься или не дописал чего то или подскажите как рациональнее поступить. Заранее огромное спасибо!!!
PM MAIL   Вверх
hamsterKSU
Дата 31.3.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 401
Регистрация: 20.10.2006
Где: Украина, Херсон

Репутация: 7
Всего: 11



все дело в том что принцып рисования у тя не правильный:
1. ты рисуешь картинки первого меню в любом случае если даже тебе надо нарисовать только второе. эти картинки просто перезарисовываются - что скажется на бастродействии.
2. ты не слидишь какое меню шас активное и в случае второго меню
Код

if(getKey == -5) {
                    if(index == 2) {
                         gr.setColor(255,0,0);
                         gr.fillRect(0,0,352,416);
                         ///***///
                    }
}

этот код при нажатии клавиши отличной от -5 не будет прорисовавать второе меню а только прорисует первое

Добавлено через 3 минуты и 51 секунду
и не надо создавать каждый раз новое меню при перерисовки.
Код

 protected void paint( Graphics g ){
          this.setFullScreenMode(true);//лажа
          
          new PMenu().paint(g);   //и это лажа 
     }

сделай типа такого в конструкторе 
Код

PMenu myMenu;
public MyCanvas(MIDlet midlet) {
        this.midlet = midlet;
                 this.setFullScreenMode(true);
                  myMenu  = new PMenu();
    }

а в 
Код

 protected void paint( Graphics g ){
        myMenu.paint(g);
     }


Добавлено через 7 минут и 48 секунд
и зачем тебе там таймер, все равно у тя ни какой динамики не наблюдается. 
ты и так все изменения отлавливаешь сам
Код

public void keyPressed(int keyCode) {
        getKey = keyCode;
        Keys(getKey);

        repaint();// сдесь ты сам все перерисовываешь
    }

так что таймер можешь закиль

Добавлено через 14 минут и 21 секунду
и что бы не было магических цифр при определении нажатой клавиши то у класса Canvas есть статичиские переменные связанные с номерми клафишь  -
Код

Canvas.LEFT
Canvas.RIGHT
Canvas.DOWN
Canvas.UP
.......................
 
и т.д
возьми книгу почитай - почитай "Горнаков С.Г. - Программирование мобильных телефонов на J2ME"
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.