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

时间:2012-11-23 23:28:33

标签: android animation andengine texturepacker

我想进行动画的“链”或循环循环,如下所述:

LABEL开始 Anim1-> Anim2-> Anim3-> Anim4 GOTO开始

以上将进行循环循环:Anim1-> Anim2-> Anim3-> Anim4并返回Anim1等等。

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

我试图在Anim1中使用AnimationListener。当调用onAnimationFinished()时,我分离Anim1,并运行Anim2并在内部函数链中执行此操作。但是,当我在Anim4时,我不知道如何回到起点并附上Anim1。

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

感谢您的帮助!

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

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

2 个答案:

答案 0 :(得分:0)

您可以使用'Texture Packer'查看所有图片是否适合4096 x 4096.

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

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

答案 1 :(得分:0)

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

尝试在每个动画侦听器中使用几个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创建几个精灵之间的动画循环。