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


Автор: fare 7.11.2007, 01:16
Столкнулся с проблемой!!! Нужно вводить с клавиатуры числа с 0-9, но не понял как это реализовать в GameCanvas!! Помогите плиз очень надо!! Просто в Canvas есть KEY_NUM0-KEY_NUM9, а здесь??? smile 

Автор: W0LF 7.11.2007, 11:59
Он же наследуется от Canvas, а в Canvas есть getKeyCode()

Автор: fare 7.11.2007, 20:18
т.е мне надо сделать так:
Код

protected void keyPressed(int keyCode)
{
int act=getKeyCode(gameAction)
     switch(act)
     {
     case Canvas.KEY_NUM0:
     действие
     break;
     default:
     break;
     }
}

если так то куда это засунуть в метод run?
Или как сделать что бы каждый цикл он ждал нажатия кнопки с 0-9 и выполнял действие в зависимости от нажатой кнопки

Автор: W0LF 8.11.2007, 11:42
Да, наверно я фигню написал. getKeyStates() возвращает все нажатые клавиши
Цитата

getKeyStates() which will return all the keys pressed

Так что надо просто подобрать константы к этим кнопкам. Тут надо поискать. но keyStates вернет все нажатое

Автор: fare 8.11.2007, 20:08
да спасибо, возвращает, но теперь другая проблема, на моей nokia 6630 кнопки 1, 3 и 0 возвращают одно и тоже значение! Т.е. ему нет разници какую кнопку я нажимаю, он все равно возвращает значение 0! Как быть в этой ситуации??

Автор: eugine_s 25.11.2007, 15:04
Цитата(fare @  8.11.2007,  20:08 Найти цитируемый пост)
Как быть в этой ситуации?? 


Если тема еще актуальна, то попробуй вместо
setFullScreenMode(true);
использовать 
setFullScreenMode(false); 

Автор: shomer 25.11.2007, 22:38
setFullScreenMode(true);
setFullScreenMode(false);
 
Проблемы не решает smile 
Для себя эту проблему в GameCanvas решил совместным использованием keyPressed  и getKeyStates - ловит все клавиши, немного криво правда но для пользования пойдет ( не всегда).
Проверял на Sjboy и Toshibe.
Код

    public int Key;
    public int prev_kst;

    public Demo( Display display)
    {
        super( true);
        disp = display;
        setFullScreenMode( true);
        width  = this.getWidth();
        height = this.getHeight();
       
    }
    
    public void start()
    {
        ...
        Thread t = new Thread( this);
        t.start();
    }
    public void run()
    {
        Graphics g = getGraphics();
        while( f_run)
        {
            DrawScreen(g);
            try{ Thread.sleep(0);}
            catch (Exception ex) {};
        }
        
    }

    public void DrawScreen( Graphics g)
    {
        int k = getKeyStates();
        ...
        KeyAction( k);
        flushGraphics();
        ...
    }
    
    public void KeyAction( int key_st)
    {
        if ( Key == 0)
            if ( key_st != prev_kst)    // отсечение повторов по getKeyStates(), кривое - но работает
                Key = key_st;
        switch ( Key)
        { 
            case -1:
            case 2:
            case 50:
                list.DecSelItem();
                break;
            case -2:
            case 56:
            case 64:
                list.IncSelItem();
                break;
            case -3:
            case 4:
            case 52:
                menu.DecSelItem();
                break;
            case -4:
            case 32:
            case 54:
                menu.IncSelItem();
                break;
            case -5:
            case 53:
            case 256:
                ind.SetCount( 0);
                break;
        }
        Key = 0;
        prev_kst = key_st;
    } 

    protected void keyPressed( int keyCode) 
    {
        Key = keyCode;
    }


При setFullScreenMode( false) нет полного экрана

Добавлено через 2 минуты и 7 секунд
Вот довесок

Автор: eugine_s 26.11.2007, 12:40
Прощу прощения, ошибся!
 smile 

Конечно, не setFullScreenMode()

а в конструкторе класса (который extends GameCanvas) использовать super(false);

Код


public class MyCanvas extends GameCanvas
{

public MyCanvas()
{
     super(false);
}

}



P.S. У меня в конструкторе эти два метода идут друг за другом, поэтому перепутал smile.

Автор: shomer 26.11.2007, 20:12
protected GameCanvas(boolean suppressKeyEvents)
Parameters:
suppressKeyEvents - true to suppress the regular key event mechanism for game keys, otherwise false

eugine_sу - респект.
-----------------------------------
Однако надо и в документацию иногда заглядывать.. ( это я про себя)

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