【问题标题】:AndEngine - Kill Sprite After X Seconds?AndEngine - X 秒后杀死 Sprite?
【发布时间】:2026-01-25 18:00:01
【问题描述】:

我正在使用 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 类的情况下完成此操作,那么我更愿意这样做,因为它会更整洁。

还要注意,屏幕上会同时在不同时间创建多个爆炸,所以我希望每个爆炸都有自己的生命周期。

【问题讨论】:

    标签: java android opengl-es-2.0 andengine


    【解决方案1】:

    您可以根据需要使用多种技术。如果您的爆炸是动画的,我只需使用带有 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);
                    }
                });
            }
        }));
    

    HTH

    这是一个延迟修改器的例子——基本结构相同

    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);
                    }
                });
            }
        }));
    

    【讨论】:

    • 这很好,但我使用的是普通的 Sprite,我不希望使用 alpha 修饰符。 DelayModifier 只是一个简单的计时器吗?我该怎么做?
    • 这里的关键是,对于任何修饰符 - Alpha、颜色、延迟任何几个运动修饰符都允许您附加 IEntityModifierListener - 这使您能够查看您所在位置的 onModifierFinished 方法分离你的精灵。您可以使用您想要或需要的任何修饰符,AplhaModifier 只是我从代码中获取的一个简单示例 - 结构和方法是相同的。我已经编辑了我的第一个答案以显示一个 DelayModifier - 相同的基本代码结构。
    • 谢谢你的代码,为什么我看到这个:The constructor DelayModifier(int, new IEntityModifierListener(){}) is undefined 然后它提示Remove argument to match 'DelayModifier(float)'
    • 与 AlphaModifer 和所有其他人都有同样的问题......:S