Android 如何在AndEngine中创建动画的循环?
我想做一个动画的“链”或循环,如下所述: 标签开始 执行动画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错误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并在
目前,我已将纹理拆分为四个平铺和四个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吗?