3

AndEngineを使ってAndroid用のゲームを作っています。現在、爆発スプライトをシーンに表示し、 X秒後に削除する方法を見つけようとしています。これが私の爆発クラスです:

public class Explosion extends Sprite {

    public Explosion(float pX, float pY, ITextureRegion pTextureRegion, VertexBufferObjectManager pVertexBufferObjectManager) {
        super(pX, pY, pTextureRegion, pVertexBufferObjectManager);
    }
}

このクラスを通常のSpriteオブジェクトとは異なるものにするために私がしたいのは、このクラスが表示され、一定の時間が経過すると破棄されることです。AndEngineを使用してこれを達成するにはどうすればよいですか?

編集:Spriteを拡張するカスタムのExplosionクラスを作成せずにこれを実行できる場合は、それがすっきりするので、そのようにすることをお勧めします。

また、画面上で同時に複数の爆発が異なる時間に作成されるため、各爆発に独自の寿命を持たせたいことに注意してください。

4

1 に答える 1

8

ニーズに応じて使用できるテクニックがいくつかあります。爆発がアニメーション化されている場合は、アニメーションがフレームを変更したり終了したりしたときに、IAnimationListenerでAnimatedSpriteを使用してトラップし、爆発スプライトを削除します。

または、DelayModifierを使用することもできます-私はこれらの1つを使用して「岩を溶かす」

または、QuadraticBezierCurveMoveModifierのような移動するModifierや、AlphaModifierのようなModiferなど、他のほぼすべてのModifierを使用できます。

使用するモディファイヤに関係なく、IEntityModifierListener()をアタッチし、onModifierFinishedで爆発のクリーンアップを実行します。

次のコードは、その手法を使用して、ゲームボードからスコアを「フェード」します。

gemScore.registerEntityModifier(new AlphaModifier(2f, 1f, 0f, new IEntityModifierListener() {

        @Override
        public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
            // TODO Auto-generated method stub
            runOnUpdateThread(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    board.detachChild(gemScore);
                }
            });
        }
    }));

HTH

これがDelayModifierの例です-同じ基本構造

mainScene.registerEntityModifier(new DelayModifier(3, new IEntityModifierListener() {

        @Override
        public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
            // TODO Auto-generated method stub
            runOnUpdateThread(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    mainScene.detachChild(sign);
                }
            });
        }
    }));
于 2012-05-30T11:11:47.820 に答える