Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > GameCanvas и обработка нажатия клавиш


Автор: DissDoc 19.1.2008, 12:20
Никак с архитектурой классов справиться не могу. Я знаю и понимаю, что 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 в мой класс?

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

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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)