Я пишу игру для Android и думаю, что у меня есть роковая ошибка в моей архитектуре и / или коде.
Архитектура в основном состоит из двух потоков, одна из которых просто непрерывно рисует экран, а другая - не контролирует движение рисованных элементов на экране на основе ввода с сенсорного экрана пользователя.
В последнем потоке я в основном делаю ручную анимацию (вставьте здесь правильный термин), что означает, что я перемещаю рисованные элементы на экране с помощью методов, которые меняют Drawables Rect в процессе игры. Я полагаю, что "нет-нет" - это вставка задержек в эти методы, чтобы они "выглядели как настоящая анимация".
Все это прекрасно работает, потому что у меня нет причин обрабатывать ввод данных пользователем во время этих анимаций, но меня действительно беспокоит то, что я создаю недостаток во многих тяжелых работах с моей игрой. Я уверен, что многие из вас могут относиться к этому с точки зрения дизайна кода.
Как правильно создать эту «ручную анимацию», чтобы мой код мог обрабатывать пользовательские события (например, касание экрана) во время анимации?
Вот справочный пример одного из моих методов:
public void BadAnimation() {
for (int k = 0; k < mAnimationHeight; k++) {
for (int i = 0; i < mRows; i++) {
for (int j = 0; j < mCols; j++) {
if (myObject.mFlag[i][j]) {
myObject[i][j].mRect.top++
}
}
}
try {
Thread.sleep(3);
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}