Как создать круговой цикл анимации в AndEngine?
Я хочу сделать "цепочку" или круговой цикл анимации, как это может быть описано ниже:
LABEL start do Anim1-> Anim2-> Anim3-> Anim4 GOTO start
Выше будет круговой цикл: Anim1->Anim2->Anim3->Anim4 и обратно к Anim1 и так далее.
Я не могу объединить все PNG в одну текстуру, потому что Andengine / Android ограничен в загрузке ресурсов. Однако, когда я делю свою первоначальную большую плитку на 4 меньших плитки, все работает нормально.
Я пытался использовать AnimationListener внутри Anim1. Когда вызывается onAnimationFinished(), я отсоединяю Anim1, запускаю Anim2 и делаю это в цепочке внутренних функций. Однако, когда я нахожусь в Anim4, я не знаю, как вернуться к началу и прикрепить Anim1.
Примечание: вся эта проблема может быть решена, если вы знаете, как я могу упаковать набор из 150 PNG, которые по отдельности достаточно большие, но помещаются в плитку размером 4096x4096 пикселей.
Спасибо за помощь!
РЕДАКТИРОВАТЬ (следуя предложенному JiMMaR решению): Я использую Texture Packer, и общая текстура превышает 4096*4096, что вызывает ошибку OutOfMemory на Android.
На данный момент я разделил текстуры на четыре плитки и четыре PNG-карты.
2 ответа
Вы должны опубликовать некоторый код, чтобы мы могли увидеть реализацию.
Попробуйте использовать несколько AnimatedSprites со слушателями анимации в каждом. Таким образом, вы можете запустить анимацию следующего спрайта в onAnimationFinished()
вызов.
private class AnimationLooperListener implements IAnimationListener{
private AnimatedSprite nextSpriteToAnimate;
public AnimationLooperListener(AnimatedSprite sprite){
nextSpriteToAnimate = sprite;
}
/** other methods are hidden */
public void onAnimationFinished(AnimatedSprite sprite){
sprite.setVisible(false);
nextSpriteToAnimate.setVisible(true);
nextSpriteToAnimate.animate(100, new AnimationLooperListener(sprite);
}
}
AnimatedSprite sprite1 = new AnimatedSprite(0, 0, tiledTextureRegion, vertex);
AnimatedSprite sprite2 = new AnimatedSprite(0, 0, tiledTextureRegion, vertex);
AnimatedSprite sprite2 = new AnimatedSprite(0, 0, tiledTextureRegion, vertex);
AnimationLooperListener listener1 = new AnimationLooperListener(sprite2);
AnimationLooperListener listener2 = new AnimationLooperListener(sprite3);
AnimationLooperListener listener3 = new AnimationLooperListener(sprite1);
sprite1.animate(100, listener1);
sprite2.animate(100, listener2);
sprite3.animate(100, listener3);
Таким образом, у вас есть цикл анимации между несколькими спрайтами, которые могут быть созданы с использованием нескольких TiledTextureRegions.
Вы можете использовать "Texture Packer", чтобы увидеть, могут ли все ваши изображения уместиться в 4096 x 4096.
Вы можете скачать Texture Packer здесь. (ПРИМЕЧАНИЕ: Texture Packer также поддерживает вывод данных AndEngine)
Вы можете использовать классы "BuildableBitmapTextureAtlas" и "BlackPawnTextureAtlasBuilder", чтобы упаковать ваши PNG в один текстурный атлас.