Я пытаюсь сделать игру для Android.
У меня есть игровой класс, который расширяет активность и обрабатывает весь пользовательский ввод. Затем у меня есть класс missionView, который расширяет представление и рисует уровень на экране.
Когда пользователь нажимает на дверь, я хочу добавить анимацию.
Что происходит: игра вызывает door.open. Изменяет состояние так, чтобы функция view.onDraw рисовала дверь наполовину открытой. Игра вызывает view.invalidate, который должен перерисовать экран. Затем игра спит полсекунды. Затем он снова вызывает door.open. При втором вызове функции она меняет состояние, поэтому функция view.onDraw полностью открывает дверь. Затем игра снова вызывает view.invalidate.
Проблема в том, что он не перерисовывает экран, когда попадает в view.invalidate. Если я установлю точку останова на строке, запусту отладчик и нажму на шаг, он не переходит в мою функцию view.onDraw. Он даже не может показать мне код, который он выполняет.
Что у меня есть:
Дверной класс:
public boolean open()
{
if (doorState == DoorState.Closed)
{
doorState = DoorState.Opening;
return true;
}
else if (doorState == DoorState.Opening)
{
doorState = doorState.Open;
return true;
}
else
{
return false;
}
}
Игровой класс:
if (tile instanceof DoorTile)
{
DoorTile doorTile = (DoorTile) tile;
Door door = doorTile.getDoor();
if (door.isClosed())
{
door.open();
selectedEntity.openDoor();
view.invalidate(); // This line does not work
try
{
Thread.sleep(500);
}
catch (InterruptedException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
door.open();
// Handled touch event so break switch statement
break;
}
}