Создание Android-игры, странная регистрация клавиш на X10 Mini Pro - PullRequest
1 голос
/ 03 августа 2010

Эй, я только начал изучать разработку Android и столкнулся с проблемой.

Элементы управления в игре Я делаю работу на виртуальном устройстве, но не на телефоне:

  • У меня Xperia X10 Mini Pro
  • Я делаю основную игру в понг, чтобы изучить разработку программного обеспечения для дроидов
  • Игра отлично работает на моем виртуальном устройстве Android, вы можете плавно перемещать весла вверх и вниз
  • На моем телефоне я понял, что событие onKeyDown не запускается до тех пор, пока я не отпущу кнопку или не удерживаю кнопку в течение секунды или двух, но затем регистрирует его только как короткое нажатие кнопки. Кнопка, не так, как если бы я удерживал ее
  • Я считаю, что функция моего телефона - быстрый доступ к специальным символам, поскольку некоторые клавиши регистрируют разные коды клавиш при быстром нажатии и удерживании
  • Проблемы, которые приводят к этому, заключаются в том, что я не могу перемещать весла, но я могу выполнять такие действия одним нажатием, как пауза в игре

Я также могу добавить:

  • Игра построена вокруг примера приложения LunarLander из SDK
  • Лунный аппарат отлично работает в виртуальном устройстве, но при подключении к телефону у меня возникают те же проблемы, что и у моего понга

Как я могу заставить свой телефон регистрировать события onKeyDown, как и должно? (Или хотя бы как виртуальное устройство?)

Код из моего класса просмотра, который расширяет SurfaceView:

@Override
public boolean onKeyDown(int keyCode, KeyEvent msg) {
    return thread.doKeyDown(keyCode, msg);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent msg) {
    return thread.doKeyUp(keyCode, msg);
}

Код из потока:

boolean doKeyDown(int keyCode, KeyEvent msg) {
    synchronized (mSurfaceHolder) {
        mP1Score = keyCode;//For debugging
        boolean okStart = false;
        if (keyCode == KeyEvent.KEYCODE_SPACE) okStart = true;
        if (mMode == STATE_PAUSE && okStart) {
            setState(STATE_RUNNING);
            return true;
        } else if (mMode == STATE_READY && okStart) {
            setState(STATE_RUNNING);
            return true;
        } else if (mMode == STATE_GOAL && okStart) {
            return true;
        }else if (mMode == STATE_END_GAME && okStart) {
            doStart();
            return true;
        } else if (mMode == STATE_RUNNING) {
            if (keyCode == KeyEvent.KEYCODE_Q) {
                mP1dY = -PLAYER_SPEED;//Player 1 up
                return true;
            } else if (keyCode == KeyEvent.KEYCODE_A) {
                mP1dY = PLAYER_SPEED;//Player 1 down
                return true;
            } else if (keyCode == KeyEvent.KEYCODE_O) {
                mP2dY = -PLAYER_SPEED;//Player 2 up
                return true;
            } else if (keyCode == KeyEvent.KEYCODE_L) {
                mP2dY = PLAYER_SPEED;//Player 2 down;
                return true;
            } else if (keyCode == KeyEvent.KEYCODE_SPACE) {
                pause();//Space is pressed in game
                return true;
            }
        }
        return false;
    }
}

boolean doKeyUp(int keyCode, KeyEvent msg) {
    boolean handled = false;
    mP2Score = keyCode;//For debugging
    synchronized (mSurfaceHolder) {
        if (mMode == STATE_RUNNING) {
            if (keyCode == KeyEvent.KEYCODE_Q
                    || keyCode == KeyEvent.KEYCODE_A) {
                mP1dY = 0;
                handled = true;
            } else if (keyCode == KeyEvent.KEYCODE_O
                    || keyCode == KeyEvent.KEYCODE_L) {
                mP2dY = 0;
                handled = true;
            }
        }
    }
    return handled;
}

Полный источник доступен здесь

1 Ответ

0 голосов
/ 03 августа 2010

Вот своего рода решение:

Проблема в способе ввода по умолчанию SE на X10 Mini Pro. Установив на телефоне другой метод ввода (в моем случае HTC_IME), я могу заставить элементы управления работать так же, как на виртуальном устройстве.

Теперь мне нужно только выяснить, как заставить его работать с методом ввода по умолчанию, и у меня будет полное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...