Я думал, что понял этот вопрос, но здесь что-то не так.Когда пользователь (я пока) пытаюсь нажать клавиши, на самом деле ничего не происходит, и у меня возникают большие проблемы с пониманием того, что я пропустил.
Подумайте об этом, прежде чем представить какой-то кодпомогите прояснить мою проблему: я использую пример Android Lunar Lander для создания своей первой «настоящей» программы для Android.В этом примере, конечно, существует класс LunarView, и класс вложен в него LunarThread.В моем коде эквивалентами этих классов являются Graphics и GraphicsThread соответственно.
Также я могу сделать спрайт анимации в 2D просто отлично на Android.У меня есть класс Player, и предположим, что GraphicsThread имеет элемент Player, называемый «игрок».Этот класс имеет четыре координаты - x1, y1, x2 и y2 - и они определяют прямоугольник, в котором должен быть нарисован спрайт.Я разработал это, чтобы я мог справиться с этим отлично.Всякий раз, когда вызывается метод doDraw (Canvas canvas), он просто смотрит на значения этих координат и соответственно рисует спрайт.
Теперь скажем - и это не совсем то, что я пытаюсьделать с программой - я пытаюсь сделать программу, в которой все, что она делает, это отображать спрайт Player в одном месте экрана, ДО первого раза, когда пользователь нажимает левую кнопку Dpad.Затем местоположение будет изменено на другое заданное положение на экране, и спрайт будет неизменно отображаться в этой позиции для остальной части программы.
Также обратите внимание, что элемент GraphicsThread в Graphics называется "thread"и что член SurfaceHolder в GraphicsThread называется «mSurfaceHolder».
Поэтому рассмотрите этот метод в классе Graphics:
@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: Left?
Спасибо!