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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отлавливание нажатий клавиш 
V
    Опции темы
Spegulo
Дата 27.5.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



И снова здравствуйте smile

Есть класс 
Код

public class eView implements Runnable{
    private MIDlet gameInstance = null;
    private Display gDisplay = null;
    private boolean isRun = true;
    private boolean isPaused = false;
    private Thread thread;

    private eFactory gFactory = null;
    private eRegistry gRegistry = null;
    private iView currentView = null;

    public eView(MIDlet owner) {
        gameInstance = owner;
        gDisplay = Display.getDisplay(gameInstance);
        gFactory = new eFactory();
        gRegistry = eRegistry.getInstance();
        currentView = gFactory.getController(gRegistry.currentScreen);
        gDisplay.setCurrent((Displayable) currentView);
    }

    private void render() {
        currentView.render();
    }

    public void run() {
        while(isRun && !isPaused){
            render();
        }
    }

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

    public void stop(){
        isRun = false;
    }

    public void pause(){
        isPaused = true;
    }

currentView - экземляр класса GameCanvas.

Проблема в том, что картинка отображается, но события нажатий не отлавливаются.
Как передавать нажатия клавиш в keyPressed() объекта currentView?

PM MAIL ICQ   Вверх
mopsa
Дата 27.5.2009, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 11.1.2009
Где: Екатеринбург/Асбе ст

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



нужно:
Код

public void keyPressed(int key){
     currentView.keyPressed(key);
}

и конечно же у currentView этот метод должен быть переопределен
PM MAIL   Вверх
Spegulo
Дата 28.5.2009, 04:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Неправильный ответ  smile
keyPressed() отлавливается только у Canvas или GameCanvas, на сколько я понял. Во всяком случае, я подобную вещь попробовал сделать - не помогло.
PM MAIL ICQ   Вверх
math64
Дата 28.5.2009, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Нажатие клавиш можно ловить также в CustomItem - но если клавиша не ловится в Canvas и GameCanvas, она не будет ловиться и в CustomItem.
PM   Вверх
Spegulo
Дата 28.5.2009, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблема в том, видимо, что eView не Canvas. Можно ли не из  Canvas отлавливать нажатия?
PM MAIL ICQ   Вверх
math64
Дата 28.5.2009, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



переопределяешь в Canvas keyPressed(int), если нужно отлавливать повторы то и keyRepeated(int) и keyReleased(int).
Имеет ли смысл использовать keyRepeated(int) определяется с помощью hasRepeatEvents()
PM   Вверх
mopsa
Дата 28.5.2009, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 11.1.2009
Где: Екатеринбург/Асбе ст

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



Цитата

Неправильный ответ  


ну да просмотрел

но не проще ли сделать eView Canvas'ом
а currentView не Canvasom а только определить в нем нужные методы типа: keyPressed, render и др.

тем более как я понимаю eView один,
а currentView'ов несколько и они меняются в зависимости от каких-то факторов

мое предложение сделать абстрактный класс View - не канвас
у него определить абстрактными нужные  методы, render и т.д.

а все currentView'ы наследовать от него.
а eView наследовать от канваса
и у него будет поле 
private    View  currentView
которому и будут передаваться все события которые перехватывает eView

Это сообщение отредактировал(а) mopsa - 28.5.2009, 10:41
PM MAIL   Вверх
Spegulo
Дата 29.5.2009, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Обошлось все немного, наверное, проще smile
Как доделаю, пожалуй, выложу в общественный доступ, может кому-то поможет граблей избежать. 
В плане производительности "движок" может и не оптимальный но для простых настольных игрушек должен подойти.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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