Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition

JAVA Micro Edition Низкоуровневое программирование мобильных телефонов.

Ответ
 
Опции темы
Старый 20.07.2011, 21:40   #1
SoboLEFF
AnyKey`щик
 
Аватар для SoboLEFF
 
Регистрация: 22.03.2009
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Помогите переназначить обработчик событий другому классу

Подскажите как переназначить обработчик событий (.setCommandListener) с класса "a" на класс "b" нажатием на клавишу FIRE (в коде класса "a" обозначена как /* ??? */).

Мейн класс BC:

import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class BC extends MIDlet implements CommandListener{

    Command okCMD = new Command("Выбор", Command.EXIT, 0);
    Command exitCMD = new Command("Выход", Command.EXIT, 9);
    a beginGameMenu;
    b Game;
    static Display disp;
    static Image begin;
    static Image tank0green;
    static Image tank0yellow;

    public void startApp() {
        try {
            begin = Image.createImage("/img/begin.png");
            tank0yellow = Image.createImage("/img/tank0yellow.png");
            tank0green = Image.createImage("/img/tank0green.png");
        } catch (IOException ex) {}
        beginGameMenu = new a();
        Game = new b();
        beginGameMenu.start();
        Game.start();
        beginGameMenu.addCommand(exitCMD);
        beginGameMenu.setCommandListener(this);
        disp = Display.getDisplay(this);
        disp.setCurrent(beginGameMenu);
    }

    public void pauseApp() {}

    public void destroyApp(boolean unconditional) {
        if(beginGameMenu != null) beginGameMenu.stop();
        if(Game != null) Game.stop();
        begin = null;
        tank0green = null;
        tank0yellow = null;
    }

    public void commandAction(Command command, Displayable displayable) {      
        if(command == exitCMD)
        {
            destroyApp(false);
            notifyDestroyed();
        }
    }
}
Класс "a":

import javax.microedition.lcdui.*;

public class a extends Canvas implements Runnable {

    boolean exit;
    int beginImagePos;
    int cycle;
    int menuPos;
    int yImageMenuPos;
    int yImageMenuPosBack;
    int key;

    public a(){
        super();
    }

    public void start() {
        Thread thread = new Thread(this);
        thread.start();
        exit = true;
        beginImagePos = 224;
        cycle = 0;
        menuPos = 1;
    }

    public void stop() {
        exit = false;
    }

    public void run() {
        while(exit){
            if(beginImagePos >= 0) {beginImagePos = beginImagePos - 2;}
            cycle();
            menuPos();
            repaint();
            try {
                Thread.sleep(50);
            } catch (InterruptedException ex) {}
        }
    }

    public void paint(Graphics graph) {
        graph.setClip(0, 0, 255, 223);
        if(beginImagePos >= 0) {graph.drawImage(BC.begin, 0, beginImagePos, 0);}
        else {
            graph.setColor(0, 0, 0);
            graph.fillRect(65, yImageMenuPosBack, 13, 13);
            graph.drawImage(Image.createImage(BC.tank0yellow, cycle, 13, 13, 13, 0),
                    65, yImageMenuPos, 0);
        }
    }

    public void keyPressed(int keyCode) {
        key = getGameAction(keyCode);
        if (beginImagePos < 0) {
            switch (key) {
                case Canvas.UP:
                    if(menuPos > 1) {--menuPos;}
                    else {menuPos = 3;}
                    break;
                case Canvas.DOWN:
                    if(menuPos < 3) {++menuPos;}
                    else {menuPos = 1;}
                    break;
                case Canvas.FIRE:
                    /* ??? */
                    break;
            }
        }else {if (key != 0) {beginImagePos = 2;}}
    }

    private void cycle() {
        if (cycle == 0) {cycle = 13;}
        else {cycle = 0;}
    }

    private void menuPos() {
        if (menuPos == 1) {yImageMenuPosBack = yImageMenuPos; yImageMenuPos = 124;}
        if (menuPos == 2) {yImageMenuPosBack = yImageMenuPos; yImageMenuPos = 140;}
        if (menuPos == 3) {yImageMenuPosBack = yImageMenuPos; yImageMenuPos = 156;}
    }
}
Класс "b":

import javax.microedition.lcdui.*;

public class b extends Canvas implements Runnable{

    boolean exit;

    public b() {super();}

    public void start() {
        Thread thread = new Thread(this);
        thread.start();
        exit = true;
    }

    public void stop() {exit = false;}

    public void run() {
        while(exit) {
            repaint();
            try {
                Thread.sleep(50);
            } catch (InterruptedException ex) {}
        }
    }

    public void paint(Graphics graph) {}

    public void keyPressed(int keyCode) {}
}
(Offline)
 
Ответить с цитированием
Старый 21.07.2011, 07:09   #2
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Помогите переназначить обработчик событий другому классу

Это учебный пример в целях тренировки или для практических целей надо? Ты скажи что хочешь получить, а то сдаётся мне что можно иначе получить результат.
(Offline)
 
Ответить с цитированием
Старый 21.07.2011, 08:35   #3
SoboLEFF
AnyKey`щик
 
Аватар для SoboLEFF
 
Регистрация: 22.03.2009
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите переназначить обработчик событий другому классу

Эм... Я пытаюсь научиться программировать на java ME. А не понятно мне вот что, в классе ВС обработчик комманд назначил на класс а (beginGameMenu.setCommandListener(this); ), а из него на прямую назначить обработчик на класс b не получается. Знаю способ переключения через комманду (Command okCmd), но это не то, хотелось бы через нажатие клавиши FIRE (Canvas.FIRE)
(Offline)
 
Ответить с цитированием
Старый 21.07.2011, 09:02   #4
SoboLEFF
AnyKey`щик
 
Аватар для SoboLEFF
 
Регистрация: 22.03.2009
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите переназначить обработчик событий другому классу

Проще говоря, надо чтобы при нажатии на центр джойстика переключался экран с одого канваса класса а на канвас класса b. Как переключить экран я знаю:

Класс ВС:

...
static a beginGameMenu;
static b Game;
...
Класс а:

...
case Canvas.FERE:
    BC.disp.setCurrent(BC.Game);
    break;
...
но на комманды он не хочет реагировать.
(Offline)
 
Ответить с цитированием
Старый 21.07.2011, 09:17   #5
SoboLEFF
AnyKey`щик
 
Аватар для SoboLEFF
 
Регистрация: 22.03.2009
Сообщений: 8
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите переназначить обработчик событий другому классу

ОМГ, меня осенило. Скадите, можно ли сразу назначить обработчик комманд нескольким классам вот так:

...
beginGameMenu.setCommandListener(this);
Game.setCommandListener(this);
...
(Offline)
 
Ответить с цитированием
Старый 21.07.2011, 14:30   #6
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Помогите переназначить обработчик событий другому классу

Можно нескольким (попробуй). Имена классов а и b - изврат! Как будто декомпиленный код у тебя. Делать отдельные канвасы для менюшек - тоже изврат!
Можно обойтись одним канвасом, но рисовать разное в зависимости от состояния.
private static final int STATE_GAME = 1;
private static final int STATE_MENU_MAIN = 2;
....
private static int state = STATE_GAME;
....
//----------------------
//в функции paint()
select(state) {
  case STATE_GAME:
    drawGame(g);
    break;
  case STATE_MENU_MAIN:
    drawMenuMain(g);
    break;
  ............
}
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
SoboLEFF (26.07.2011)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 00:28.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com