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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GameCanvas и обработка нажатия клавиш, никак не могу понять 
:(
    Опции темы
DissDoc
Дата 19.1.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Никак с архитектурой классов справиться не могу. Я знаю и понимаю, что GameCanvas наследован от Canvas. Но как обработать одинарное нажатие клавиш в GameCanvas? (т.е. помимо DOWN_PRESSED нужно еще и обработать DOWN)
Вот так у меня построен код
Код

public class TestGameCanvas extends GameCanvas implements Runnable {
    
    private boolean interrupted;
    
    public TestGameCanvas() {
        super(true);
        try {
            this.setFullScreenMode(true);
            this.init();
        } catch(IOException ex) {
            ex.printStackTrace(); 
        }
    }
    
    public void run() {
        Graphics g = getGraphics();
        
        while (!this.interrupted) {
            this.input();
            this.render(g);
        }
        
        try {
            Thread.sleep(100);
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    }
    
    // Функция обработки нажатия клавиш
    private void input()
    {
        int keyState = getKeyStates();
        
        if ((keyState & LEFT_PRESSED) != 0) {

        } else if ((keyState & RIGHT_PRESSED) != 0) {
                
        } else if ((keyState & DOWN_PRESSED) != 0) {
            System.out.println("==_");
        } else if ((keyState & UP_PRESSED) != 0) {
            System.out.println("==^");
        }
    }
    
    // Функция отрисовки экрана
    private void render(Graphics g)
    {
        // Получим ширину и высоту экрана
        int getW = getWidth();
        int getH = getHeight();
        
        // Установим цвет поля для меню и старта
        g.setColor(0x000000);
        g.fillRect(0, 0, getW, getH);
        
        flushGraphics();
    }

    void stop() {
        this.interrupted = true;
    }

    private void init() throws IOException {
    }
}


Здесь в функции input() обрабатываются нажатия клавиш, которые работают на PRESSED, как мне вставить еще и keyRelease в мой класс?
PM MAIL WWW   Вверх
Sardar
Дата 19.1.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



getKeyStates() позволяет опросить состояние клавы на момент вызова, может быть нажато несколько кнопок. Это удобно для скроллерных игрушек. Но "старые" key*() события в купе с getGameAction() никто не отменял. Мало того в редких случаях сам getKeyStates() может быть эмулирован на key*() событиях, внося задержки (на практике не встречал).

Цитата(DissDoc @  19.1.2008,  11:20 Найти цитируемый пост)
как мне вставить еще и keyRelease в мой класс? 

Переопредели keyRelease() у себя в классе.

P.S. естественно в конструкторе нужен super(false) ;-)


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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