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 - 我使用其中一个来“溶解岩石”

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

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

高温高压

这是 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 回答