Как создать круговой цикл анимации в 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 в один текстурный атлас.

Другие вопросы по тегам