AndEngine - X秒后杀死雪碧?

时间:2012-05-30 01:21:36

标签: java android opengl-es-2.0 andengine

我正在使用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类的情况下关闭它,那么我宁愿这样做,因为它会更整洁。

另请注意,屏幕会在不同时间创建多次爆炸,因此我希望每次爆炸都有自己的个人寿命。

1 个答案:

答案 0 :(得分:8)

根据您的需要,您可以使用多种技术。如果你的爆炸是动画的,我只是使用一个带有IAnimationListener的AnimatedSprite来捕捉动画改变帧和/或完成时的陷阱,然后移除爆炸精灵。

或者,您可以使用DelayModifier - 我使用其中一种“溶解岩石”

或者,您可以使用几乎任何其他修改器 - 例如像QuadraticBezierCurveMoveModifier这样的移动修改器,或者像AlphaModifier这样的Modifer。

无论使用哪种修饰符,都附加一个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);
                }
            });
        }
    }));