Модель потоков AndEngine: как дождаться остановки анимации?

#android #multithreading #andengine

#Android #многопоточность #andengine

Вопрос:

извините, если этот вопрос где-то существует

Я разрабатываю игру, очень похожую на memory matrix, мою первую игру с использованием AndEngine. В моей игре на этапе загрузки матрицы я должен убедиться, что только после загрузки матрицы игра переходит в режим воспроизведения (только тогда будут обработаны действия пользователя). Итак, в приведенной ниже процедуре для встраивания модификатора в плитки я использовал CountDownLatch :

 public static void loadingBoardAnimation(Sprite board,
        List<AnimatedSprite> tiles, final Set<Integer> keys,
        Runnable playing) {
    final CountDownLatch latch = new CountDownLatch(keys.size());

    for (final AnimatedSprite tile : tiles) {
        /* Appear */
        MoveModifier initialMove = new MoveModifier(1, board.getX(),
                board.getY(), tile.getX(), tile.getY());

        /* Delay 1 second */
        DelayModifier delay = new DelayModifier(1);

        SequenceEntityModifier animation = new SequenceEntityModifier(
                new IEntityModifierListener() {

                    @Override
                    public void onModifierStarted(
                            IModifier<IEntity> pModifier, IEntity pItem) {}

                    @Override
                    public void onModifierFinished(
                            IModifier<IEntity> pModifier, IEntity pItem) {
                        if (keys.contains(tile.getTag())) {
                            tile.animate(50, false);
                        }
                        latch.countDown();
                    }

                }, initialMove, delay);
        tile.registerEntityModifier(animation);
    }

    /* Wait until animation finishes */
    try {
        latch.await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
  

Но, похоже, когда выполняется эта процедура, она блокирует всю игру. Я поместил точку останова в latch.countDown() и вижу, что отладчик никогда туда не доберется. Итак, я предполагаю, что модель AndEngine использует архитектуру, управляемую событиями, только в одном потоке (новая анимация не может быть отправлена), это верно? И в этом случае кто-нибудь может предложить мне решение :-)…. Заранее спасибо