0

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

LABEL start do Anim1->Anim2->Anim3->Anim4 GOTO start

上面会做一个循环循环:Anim1->Anim2->Anim3->Anim4 然后回到 Anim1 等等。

我无法将所有 PNG 合并到一个纹理中,因为 Andengine/Android 在加载资源方面受到限制。但是,当我将最初的大图块分成 4 个小图块时,一切正常。

我尝试在 Anim1 中使用 AnimationListener。当 onAnimationFinished() 被调用时,我分离 Anim1,运行 Anim2 并在内部函数链中执行此操作。但是,我在Anim4的时候,不知道怎么回到起点,附加Anim1。

注意:如果您知道我如何打包一组 150 个 PNG,这些 PNG 单独很大,但适合 4096x4096 像素的图块,那么所有这些问题都可以解决。

谢谢您的帮助!

编辑(按照 JiMMaR 提出的解决方案):我正在使用 Texture Packer,整体 Texture 超过 4096*4096,导致 Android 上出现 OutOfMemory 错误。

目前,我已将纹理分成四个图块和四个 PNG 图块图。

4

2 回答 2

0

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

尝试在每个中使用多个带有动画侦听器的 AnimatedSprite。这样你就可以在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 创建的几个精灵之间。

于 2012-12-02T23:22:50.690 回答
0

您可以使用“Texture Packer”查看所有图像是否适合 4096 x 4096。

您可以从这里下载 Texture Packer 。(注意:Texture Packer 也支持 AndEngine 数据输出)

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

于 2012-11-24T12:40:42.123 回答