#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 использует архитектуру, управляемую событиями, только в одном потоке (новая анимация не может быть отправлена), это верно? И в этом случае кто-нибудь может предложить мне решение :-)…. Заранее спасибо