Как создать «ручную анимацию» в игру для Android без задержек кода - PullRequest
4 голосов
/ 03 октября 2010

Я пишу игру для 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();
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 05 октября 2010

Это отличный учебник, который покажет вам, как правильно реализовать задержку:

http://www.droidnova.com/playing-with-graphics-in-android-part-i,147.html

В нем также рассказывается, как принимать пользовательский ввод при одновременном изменении состояния игры и рисовании на экране.

0 голосов
/ 05 октября 2010

Лучший способ сделать это внутри игрового цикла.У вас есть таймер, который у вас работает, если он истек, выполните ваше розыгрыш, сбросьте таймер.В противном случае ничего не делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...