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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GameCanvas - клава. 
V
    Опции темы
nerezus
Дата 26.5.2008, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



решил к вам вернуться. Возникла кстати трабла:


Код

public class KeysGameCanvas extends GameCanvas implements Keys {

    protected boolean[] states;

    protected KeysGameCanvas(boolean b) {
        super(false);
        states = new boolean[30];
    }

    protected void keyPressed(int code) {
        System.out.println(code); # не печатает, не входит сюда
        keyChanged(code, true);
    }
и т.д.

Вот тут keyPressed(int code) почему-то не вызывается ) как заставить работать? )


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
eugine_s
Дата 26.5.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тут все правильно.

Вот такое не забыл сделать: 

Display.getDisplay(_midlet_).setCurrent(_эксземпляр_KeysGameCanvas);

?
Сам класс KeysGameCanvas подает какие-то признаки "жизни".

Попробуй в других местах KeysGameCanvas  поставить System.out.println("some_text");



PM MAIL   Вверх
nerezus
Дата 26.5.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Тут все нормально. Не пашет именн этот метод.
Я через него вывожу кстати состояние клавиш и т.д. Пока что все нули, т.к. не вызывается этот метод (



P.S. Могу дать весь код(3 класса) + проект для идеи, там не много. Но так вроде тут не принято )


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
eugine_s
Дата 26.5.2008, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Без исходников не обойтись....
PM MAIL   Вверх
nerezus
Дата 26.5.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Код

import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;

public class ArkMIDlet extends MIDlet {

    ArkCanvas gCanvas;

    public ArkMIDlet() {
        gCanvas = new ArkCanvas();
    }

    public void startApp() {
        Display display = Display.getDisplay(this);
        System.out.println("start");
        gCanvas.start();
        display.setCurrent(gCanvas);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
}


Код

import javax.microedition.lcdui.game.GameCanvas;

interface Keys {
    int NONE = 0;
    int LEFT = 1;
    int RIGHT = 2;
    int UP = 3;
    int DOWN = 4;
    int FIRE = 5;
    int LSOFT = 6;
    int RSOFT = 7;
    int GREEN = 8;
    int PEN = 9;
    int C = 10;
    int VOLUP = 11;
    int VOLDOWN = 12;
    int MENU = 13;
    int SYSMENU = 14;
    int STAR = 18;
    int SHARP = 19;
    int N0 = 20;
    int N1 = 21;
    int N2 = 22;
    int N3 = 23;
    int N4 = 24;
    int N5 = 25;
    int N6 = 26;
    int N7 = 27;
    int N8 = 28;
    int N9 = 29;
}

public class KeysGameCanvas extends GameCanvas implements Keys {

    protected boolean[] states;

    protected KeysGameCanvas() {
        super(false);
        states = new boolean[30];
    }

    protected boolean getKey(int code) {
int c = code; # сломан тэг
           return states[c];
    }

    protected void keyPressed(int code) {
        System.out.println(code);
        keyChanged(code, true);
    }

    protected void keyReleased(int code) {
        keyChanged(code, false);
    }

    protected void keyChanged(int code, boolean state) {
        switch (code) {
            case -1:                // up
                states[Keys.UP] = state;
                break;
            case -2:                // down
                states[Keys.DOWN] = state;
                break;
            case -3:                // left
                states[Keys.LEFT] = state;
                break;
            case -4:                // right
                states[Keys.RIGHT] = state;
                break;
            case -5:                // fire
                states[Keys.FIRE] = state;
                break;
            case -6:                // left soft
                states[Keys.LSOFT] = state;
                break;
            case -7:                // right soft
                states[Keys.RSOFT] = state;
                break;
            case -10:                // green
                states[Keys.GREEN] = state;
                break;
            case -50:                // pen
                states[Keys.PEN] = state;
                break;
            case -8:                // c
                states[Keys.C] = state;
                break;
            case '*':
                states[Keys.STAR] = state;
                break;
            case '#':
                states[Keys.SHARP] = state;
                break;
            case '0':
                states[Keys.N0] = state;
                break;
            case '1':
                states[Keys.N1] = state;
                break;
            case '2':
                states[Keys.N2] = state;
                break;
            case '3':
                states[Keys.N3] = state;
                break;
            case '4':
                states[Keys.N4] = state;
                break;
            case '5':
                states[Keys.N5] = state;
                break;
            case '6':
                states[Keys.N6] = state;
                break;
            case '7':
                states[Keys.N7] = state;
                break;
            case '8':
                states[Keys.N8] = state;
                break;
            case '9':
                states[Keys.N9] = state;
                break;
            default:
                break;
        }
    }

    protected String keysArray() {
        String result = "";
        for(int i = 0; i < states.length; i++) {
            result += states[i] ? "1" : "0";
        }
        return result;
    }
    
}



Код

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import java.io.IOException;

public class ArkCanvas
        extends KeysGameCanvas implements Runnable {

        // the couple image
    private Image coupleImg;

    // the couple image coordinates
    private int coupleX;
    private int coupleY;

    // the distance to move in the x axis
    private int dx = 1;

    // the center of the screen
    public final int CENTER_X = getWidth() / 2;
    public final int CENTER_Y = getHeight() / 2;

    int keyState;
    
    public ArkCanvas() {
    }

    public void start() {

        try {

            // create and load the couple image
            // and then center it on screen when
            // the MIDlet starts
            coupleImg = Image.createImage("/couple.gif");
            coupleX = CENTER_X;
            coupleY = CENTER_Y;

        } catch (IOException ioex) {
            System.err.println(ioex);
        }

        setFullScreenMode(true);
        Thread runner = new Thread(this);
        runner.start();

    }

    /** @noinspection ConstantConditions,InfiniteLoopStatement */
    public void run() {
        while (true) { // infinite loop
            verifyGameState();
            //checkUserInput();
            updateGameScreen(getGraphics());
            //noinspection EmptyCatchBlock
            try {
                Thread.sleep(30);
            } catch (Exception e) {}

        }

    }

    private void verifyGameState() {
        // doesn't do anything yet
    }

    private void checkUserInput() {
        keyState = getKeyStates();
        if ((keyState & LEFT_PRESSED) != 0) {
            coupleX -= dx;
        } else if ((keyState & RIGHT_PRESSED) != 0) {
            coupleX += dx;
        }

    }

    volatile int[] keycodes;

    protected void keyPressed(int code) {
        keyState = code;
        //int bits = code;
        //key |= bits;
        //key_trg |= bits;
    }

    private void updateGameScreen(Graphics g) {
        // the next two lines clear the background
        g.setColor(0xffffff);
        g.fillRect(0, 0, getWidth(), getHeight());

        // draws the couple image according to current
        // desired positions
        g.drawImage(
                coupleImg, coupleX,
                coupleY, Graphics.HCENTER | Graphics.BOTTOM);

        String s = keysArray(); //"code:" + keyState;
        //if (keyState != 0) {
        //    System.out.println(s);
        //}
        g.setColor(255);
        g.drawString(s, 40, 40, Graphics.TOP| Graphics.LEFT);
        // this call paints off screen buffer to screen
        flushGraphics();
    }

}


Это сообщение отредактировал(а) nerezus - 26.5.2008, 23:21


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
eugine_s
Дата 26.5.2008, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



1. Класс ArkCanvas переопределил метод keyPressed - поэтому ничего не выводит.

2. getKeyStates() (в методе checkUserInput() ) - работать не будет правильно, так как конструктор GameCanvas вызывается с параметром false.
protected KeysGameCanvas() {
        super(false);
        states = new boolean[30];
    }

GameCanvas

protected GameCanvas(boolean suppressKeyEvents)

    Creates a new instance of a GameCanvas. A new buffer is also created for the GameCanvas and is initially filled with white pixels.

    If the developer only needs to query key status using the getKeyStates method, the regular key event mechanism can be suppressed for game keys while this GameCanvas is shown. If not needed by the application, the suppression of key events may improve performance by eliminating unnecessary system calls to keyPressed, keyRepeated and keyReleased methods.

    If requested, key event suppression for a given GameCanvas is started when it is shown (i.e. when showNotify is called) and stopped when it is hidden (i.e. when hideNotify is called). Since the showing and hiding of screens is serialized with the event queue, this arrangement ensures that the suppression effects only those key events intended for the corresponding GameCanvas. Thus, if key events are being generated while another screen is still shown, those key events will continue to be queued and dispatched until that screen is hidden and the GameCanvas has replaced it.

    Note that key events can be suppressed only for the defined game keys (UP, DOWN, FIRE, etc.); key events are always generated for all other keys.

Parameters:
    suppressKeyEvents - true to suppress the regular key event mechanism for game keys, otherwise false.


Вообщем, если хочешь использовать getKeyState вызывай конструктор c true, если будешь использовать keyPressed то вызывай конструктор с false.

PM MAIL   Вверх
nerezus
Дата 26.5.2008, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Цитата

 Класс ArkCanvas переопределил метод keyPressed - поэтому ничего не выводит.
 Спасибо ) Блин, невнимательность (((
 
Цитата

getKeyStates() (в методе checkUserInput() ) - работать не будет правильно, так как конструктор GameCanvas вызывается с параметром false.
 А я его закоментил - он мне не нужен, он не ловит обычные кнопки (

Цитата

если будешь использовать keyPressed то вызывай конструктор с false.
 С false вызываю - ибо так полноценно можно )

Спасибо)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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