Я пытаюсь сделать игру для Android.
У меня есть игровой класс, который расширяет активность и обрабатывает все пользовательские ввода. Затем у меня есть класс missionView, который расширяет представление и рисует уровень на экране.
Когда пользователь нажимает на дверь, я хочу добавить анимацию.
Что происходит: игра вызывает door.open. Изменяет состояние, так что функция view.onDraw будет закрывать дверь наполовину. Игра вызывает view.invalidate, которая должна перерисовывать экран. Затем игра спит полсекунды. Затем он снова вызывает дверь. Во второй раз функция называется изменением состояния, так что функция 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;
}
}