Каковы основы контакта с событиями ввода данных пользователем в Android?

Я думал, что понял этот вопрос, но что-то довольно неправильно здесь. Когда пользователь (меня, до сих пор) пытается нажать клавиши, ничего действительно не происходит, и я испытываю много затруднений, понимающих, чем случается так, что я отсутствовал.

Рассмотрите это, прежде чем я представлю некоторый код, чтобы помочь разъяснить мою проблему: Я использую Лунный пример Высаживающегося на берег Android для создания моей первой "реальной" программы Android. В том примере, конечно, там существуют класс LunarView и класс, вложенный там LunarThread. В моем коде эквиваленты этих классов являются Графикой и GraphicsThread, соответственно.

Также я могу сделать анимации спрайта в 2D очень хорошо на Android. У меня есть класс Плеера, и скажем, GraphicsThread имеет участника Плеера, называемого "плеером". Этот класс имеет четыре координаты - x1, y1, x2, и y2 - и они определяют прямоугольник, в котором должен быть оттянут спрайт. Я разработал его так, чтобы я мог обработать это отлично. Каждый раз, когда doDraw (Холст холста) метод вызывается, он просто посмотрит на значения тех координат и потянет спрайт соответственно.

Теперь скажем, - и это не действительно, что я пытаюсь сделать с программой - я пытаюсь сделать программу, где все, что она делает, отобразить спрайт Плеера в одном местоположении экрана ДО ПЕРВОГО раза, когда пользователь нажимает левую кнопку Dpad. Затем местоположение будет изменено к другой позиции набора по экрану, и спрайт будет оттянут в том положении для остальной части программы неизменно.

Также обратите внимание, что члена GraphicsThread в Графике называют "потоком", и что члена SurfaceHolder в GraphicsThread называют "mSurfaceHolder".

Поэтому рассмотрите этот метод в классе Графика:

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

Также считайте этот метод в классе GraphicsThread:

boolean keyDownHandler(int keyCode, KeyEvent msg) {
    synchronized (mSurfaceHolder) {
        if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
            player.x1 = 100;
            player.y1 = 100;
            player.x2 = 120;
            player.y2 = 150;
        }
    }
    return true;
}

Теперь затем предполагая, что координаты игрока начинаются как (200, 200, 220, 250), почему не будет, он делает что-либо различное, когда я нажимаю Dpad: Левый?

Спасибо!

7
задан Panzercrisis 13 April 2010 в 06:50
поделиться

2 ответа

Выбросьте LunarLander и используйте настоящее руководство: Игра с графикой в ​​Android

0
ответ дан 7 December 2019 в 20:35
поделиться

Прежде чем беспокоиться о реальном движении и тому подобном, я бы рассмотрел журнал ...

Что-то вроде:

Log.d("lunar", "keyCode = ["+String.valueOf(keyCode)+"] // msg = ["+String.valueOf(msg)+"]");

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

Надеюсь, это поможет в диагностике и т. д. (Все из этого написано от руки, может содержать ошибки)

1
ответ дан 7 December 2019 в 20:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: