Android 如何在AndEngine中创建动画的循环?

Android 如何在AndEngine中创建动画的循环?,android,animation,andengine,texturepacker,Android,Animation,Andengine,Texturepacker,我想做一个动画的“链”或循环,如下所述: 标签开始 执行动画1->动画2->动画3->动画4 开始 上面将做一个循环:Anim1->Anim2->Anim3->Anim4,然后返回Anim1,依此类推 我无法将所有PNG合并到一个纹理中,因为Andengine/Android在加载资源时受到限制。然而,当我把我最初的大瓷砖分成4块小瓷砖时,一切都很好 我尝试在Anim1中使用AnimationListener。调用onAnimationFinished()时,我分离Anim1,运行Anim2并在

我想做一个动画的“链”或循环,如下所述:

标签开始 执行动画1->动画2->动画3->动画4 开始

上面将做一个循环:Anim1->Anim2->Anim3->Anim4,然后返回Anim1,依此类推

我无法将所有PNG合并到一个纹理中,因为Andengine/Android在加载资源时受到限制。然而,当我把我最初的大瓷砖分成4块小瓷砖时,一切都很好

我尝试在Anim1中使用AnimationListener。调用onAnimationFinished()时,我分离Anim1,运行Anim2并在内部函数链中执行此操作。然而,当我在Anim4中时,我不知道如何回到开始并附加Anim1

注:如果您知道如何包装一组150个PNG,每个PNG都相当大,但适合4096x4096 px的瓷砖,那么所有这些问题都可以解决

谢谢你的帮助

编辑(遵循JiMMaR提出的解决方案): 我正在使用纹理打包器,整体纹理超过4096*4096,导致Android上出现OutOfMemory错误


目前,我已将纹理拆分为四个平铺和四个PNG平铺贴图。

您可以使用“纹理打包器”查看您的所有图像是否适合4096 x 4096

您可以从下载纹理打包器。(注意:纹理打包器也支持引擎数据输出)


您可以使用“BuildableBitmapTextureAtlas”和“BlackPawnTextureAtlasBuilder”类将PNG打包到一个纹理图集中。

您应该发布一些代码,以便我们可以看到实现

尝试使用多个动画精灵,每个精灵中都有动画侦听器。这样,您就可以在
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);

通过这种方式,可以在多个精灵之间创建一个动画循环,这些精灵可以使用多个平铺纹理区域创建。

您需要获得用于AndEngine的texturePackerExtension,并且出于兼容性原因,您不应该使用大于2048的纹理图集。实际上,我使用TexturePacker!对于我所有的PNG,纹理的大小超过4096*4096,这会导致OutOfMemory错误。如果分割纹理,则不会出现此错误。所以,为了克服这个限制,我想从Anim1链接到anim2。我该怎么做?发布你的代码块。这将有助于克服替代品的问题。你不能像附加Anim2那样重新附加Anim1吗?