0

以下に説明するように、アニメーションの「チェーン」または循環ループを実行したい:

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

上記は循環ループを実行します: Anim1->Anim2->Anim3->Anim4 そして Anim1 に戻ります。

Andengine/Android はリソースの読み込みに制限があるため、すべての PNG を 1 つのテクスチャにマージすることはできません。ただし、最初の大きなタイルを 4 つの小さなタイルに分割すると、すべて正常に動作します。

Anim1 内で AnimationListener を使用しようとしました。onAnimationFinished() が呼び出されると、Anim1 をデタッチし、Anim2 を実行して、内部関数のチェーンでこれを行います。ただ、Anim4の時、最初に戻ってAnim1を付ける方法がわかりません。

注: 150 個の PNG のセットをパックする方法を知っていれば、この問題はすべて解決できます。これらの PNG はそれぞれ非常に大きく、4096x4096 ピクセルのタイルに収まります。

ご協力ありがとうございました!

編集 (JiMMaR の提案された解決策に従う): 私は Texture Packer を使用していますが、テクスチャ全体が 4096*4096 を超えているため、Android で OutOfMemory エラーが発生します。

現時点では、テクスチャを 4 つのタイルに分割し、4 つの PNG タイルマップに分割しました。

4

2 に答える 2

0

「Texture Packer」を使用して、すべての画像が 4096 x 4096 に収まるかどうかを確認できます。

ここからテクスチャ パッカーをダウンロードできます。(注: Texture Packer は AndEngine データ出力もサポートしています)

「BuildableBitmapTextureAtlas」および「BlackPawnTextureAtlasBuilder」クラスを使用して、PNG を 1 つのテクスチャ アトラスにパックできます。

于 2012-11-24T12:40:42.123 に答える
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);

このようにして、複数の TiledTextureRegion を使用して作成できる複数のスプライト間にアニメーション ループができます。

于 2012-12-02T23:22:50.690 に答える