Сделать домашней|Добавить в избранное
 

Многопользовательский новостной движок,
предназначенный для организации собственных
СМИ и блогов в интернете.

 
Игры и программы для телефонов » Статьи » Программирование » Реализация графического меню. Часть 1 (Программирование на J2me)
на правах рекламы

Реализация графического меню. Часть 1 (Программирование на J2me)

Автор: SlaDER от 19 января 2008
  • 68
В прошлом подавляющее большинство игр для телефонов использовали меню на основе форм - базового интерфейса телефона. Эти <!--ecode1-->
import javax.microedition.lcdui.*;

public class GMenu extends Canvas implements Runnable {

    private static boolean running;

    /* Меню */
    private String mString[] = {
        "Новая игра","Опции", "Авторы", "Выход"};

    private int xPos; // X координата пункта меню
    private int yPos; // Y координата пункта меню
    private int widthMenu; // Ширина пункта меню
    private int heightMenu; // Высота пункта меню
    private int spaceMenu; // Расстояние между пунктами меню
    private int index; // Индекс текущего пункта меню

    /* Экран */
    private int width; // Ширина экрана
    private int height; // Высота экрана

public GMenu() {
/*
Без вызова super() ваши экземпляры
Canvas не смогут действовать как настоящие Canvas. Они не будут
отображаться правильно, они не будут отрисовываться должным образом и они
не смогут обрабатывать события.
*/
     super();

     /* Экран */
     width = getWidth(); //Определяем ширину экрана
     height = getHeight(); //Определяем высоту экрана

     /* Меню */
     spaceMenu = height/8; // Устанавливаем расстояние между пунктами меню (Ширина экрана / 8)

     xPos = width/2; // Устанавливаем Y координату пункта меню (Ширина экрана / 2)
     yPos = height/8; // Устанавливаем Y координату пункта меню (Ширина экрана / 8)

     widthMenu = 80;  //Устанавливаем ширину пункта меню
     heightMenu = 20; //Устанавливаем высоту пункта меню

     index = 0;
}

public void run(){
     try {
       while (running) {
        Thread.sleep(20L);
       }
     }
     catch(InterruptedException ie) { System.out.println(ie.toString()); }
}

protected void paint(Graphics g){
      g.setColor(255, 255, 255); // Задаем цвет (Белый)
      g.fillRect(0, 0, getWidth(), getHeight()); // Очистка экрана

      g.setColor(0, 0, 0); //Задаем цвет (Черный)

      for(int i=0; i<mString.length; i++){ // Рисуем все пункты меню
            g.drawRect(xPos - widthMenu/2, yPos + spaceMenu * i, widthMenu, heightMenu);
      g.drawString(mString[i], xPos, yPos + spaceMenu * i, g.TOP | g.HCENTER);
      }

      g.setColor(255, 0, 0); // Задаем цвет (Красный)
      g.drawRect(xPos - widthMenu/2, yPos + spaceMenu * index, widthMenu, heightMenu); // Рисуем прямоугольник
    
      repaint(); //Перерисовываем изменения
}

synchronized void start() {
    running = true;
    Thread thread = new Thread(this); //Создаем новый поток
        thread.start();
}

synchronized void stop() {
    running = false;
}

public void keyPressed(int KeyCode) {
      switch(KeyCode){
       case -2: // Вверх (Up)
          if(index < mString.length - 1)
            index++;
          break;

       case -1: // Вниз (Down)
              if(index > 0)
            index--;
          break;

       case -5: // Огонь (Fire)
          //
          break;
          
      }

}

}
[/code]

В следующих статьях мы реализуем поддержку изображений и дополним функциональность нашего меню.

Скачать исходный код к статье (WTK) Вы не можете скачивать файлы с нашего сервера
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
  • Группа: Посетители
  • ICQ:
  • Регистрация: 28.08.2007
  • Статус: Пользователь offline
  • Комментариев: 6
  • Публикаций: 0
^
Хм.... а почему вы не выложили код Menu.java? Приходится качать проэкт и тупо компилить его... Кому это нужно??
  • SlaDER

  • 22 января 2008 13:05
  • Группа: Посетители
  • ICQ: 241
  • Регистрация: 20.08.2007
  • Статус: Пользователь offline
  • Комментариев: 251
  • Публикаций: 420
^
Думаю, если человек "дорос до Canvas", то он знает основы J2me. Кроме того в самых первых статьях все описано. Исходник выложен для тех кому не хочется разбираться в коде и он хочет увидеть сразу результат.

--------------------
  • Группа: Посетители
  • ICQ:
  • Регистрация: 28.08.2007
  • Статус: Пользователь offline
  • Комментариев: 6
  • Публикаций: 0
^
Вот ЭТО можно было всунуть в статью?
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Menu extends MIDlet implements CommandListener
{
// ----------------------------------------------------------------
Command e = new Command("Выход", Command.EXIT, 0);
public GMenu gm;
// ----------------------------------------------------------------
public void startApp(){
try{
gm = new GMenu();
gm.start();
gm.addCommand(e);
gm.setCommandListener(this);
Display.getDisplay(this).setCurrent(gm);
}catch(Exception ex){}
}
// ----------------------------------------------------------------
public void pauseApp() {}
// ----------------------------------------------------------------
public void destroyApp(boolean unconditional) {
if(gm!=null) gm.stop();}
// ----------------------------------------------------------------
public void commandAction(Command c, Displayable d)
{
if(c==e)
{
destroyApp(false);
notifyDestroyed();
}
}
// ----------------------------------------------------------------
}
  • W0LF

  • 28 января 2008 10:42
  • Группа: Посетители
  • ICQ:
  • Регистрация: 28.01.2008
  • Статус: Пользователь offline
  • Комментариев: 1
  • Публикаций: 0
^
Что это за рекурсивный метод paint?? зачем так делать?

Учитывая то, что это всего-лишь меню - я бы отрисовывал экран только после изменения какого-то в меню. зачем все время впустую ганять перерисовку?
  • SlaDER

  • 28 января 2008 10:49
  • Группа: Посетители
  • ICQ: 241
  • Регистрация: 20.08.2007
  • Статус: Пользователь offline
  • Комментариев: 251
  • Публикаций: 420
^
WOLF это просто пример, что такое Canvas и для чего его можно использовать. А меню это просто пример. Да я с тобой согласен, что можно сделать перерисовку экрана в данном случаи при нажатии на кнопки.

--------------------
  • Группа: Посетители
  • ICQ:
  • Регистрация: 7.02.2008
  • Статус: Пользователь offline
  • Комментариев: 4
  • Публикаций: 0
^
от SlaDER еще раз такую чушь увижу и в бан.
  • Группа: Посетители
  • ICQ: 420928085
  • Регистрация: 25.11.2007
  • Статус: Пользователь offline
  • Комментариев: 11
  • Публикаций: 2
^
А продолжение када? lol Требую продолжения!!! bully

--------------------
  • SlaDER

  • 28 марта 2008 12:35
  • Группа: Посетители
  • ICQ: 241
  • Регистрация: 20.08.2007
  • Статус: Пользователь offline
  • Комментариев: 251
  • Публикаций: 420
^
Будет щас время есть, буду дописывать продолжение.

--------------------
 

Уважаемые вебмастера, Вы
просматриваете тестовую страницу
DataLife Engine.
Текущая версия 9.6.