如何让 AnimatedSprite 播放一次然后自行删除?

发布于 2024-11-30 20:21:58 字数 1584 浏览 5 评论 0 原文

我有一个方法 makeExplosion:

private void makeExplosion(float x, float y){
    final AnimatedSprite explosion = new AnimatedSprite(x, y, BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mExplosionBitmapTextureAtlas, this, "explosion.png", 0, 0, 4, 2)); 
    explosion.animate(50);
    mScene.attachChild(explosion);
    explosion.registerUpdateHandler(new IUpdateHandler(){

        @Override
        public void onUpdate(float pSecondsElapsed) {
            if(explosion.getCurrentTileIndex() == 7){
                mScene.detachChild(explosion);
            }
        }

        @Override
        public void reset() {

        }});
}

..它不起作用。我收到以下错误:

FATAL EXCEPTION: UpdateThread
java.lang.IndexOutOfBoundsException: Invalid index 19, size is 19
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
    at java.util.ArrayList.get(ArrayList.java:311)
    at org.anddev.andengine.entity.Entity.onManagedUpdate(Entity.java:1024)
    at org.anddev.andengine.entity.scene.Scene.onManagedUpdate(Scene.java:250)
    at org.anddev.andengine.entity.Entity.onUpdate(Entity.java:882)
    at org.anddev.andengine.engine.Engine.onUpdateScene(Engine.java:488)
    at org.anddev.andengine.engine.Engine.onUpdate(Engine.java:483)
    at org.anddev.andengine.engine.Engine.onTickUpdate(Engine.java:459)
    at org.anddev.andengine.engine.Engine$UpdateThread.run(Engine.java:685)

...我假设这是因为我删除了 onUpdate() 中间的 AnimatedSprite。如果没有这个问题,我怎样才能实现我想要的目标?

I have a method makeExplosion:

private void makeExplosion(float x, float y){
    final AnimatedSprite explosion = new AnimatedSprite(x, y, BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mExplosionBitmapTextureAtlas, this, "explosion.png", 0, 0, 4, 2)); 
    explosion.animate(50);
    mScene.attachChild(explosion);
    explosion.registerUpdateHandler(new IUpdateHandler(){

        @Override
        public void onUpdate(float pSecondsElapsed) {
            if(explosion.getCurrentTileIndex() == 7){
                mScene.detachChild(explosion);
            }
        }

        @Override
        public void reset() {

        }});
}

..which does not work. I get the following error:

FATAL EXCEPTION: UpdateThread
java.lang.IndexOutOfBoundsException: Invalid index 19, size is 19
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
    at java.util.ArrayList.get(ArrayList.java:311)
    at org.anddev.andengine.entity.Entity.onManagedUpdate(Entity.java:1024)
    at org.anddev.andengine.entity.scene.Scene.onManagedUpdate(Scene.java:250)
    at org.anddev.andengine.entity.Entity.onUpdate(Entity.java:882)
    at org.anddev.andengine.engine.Engine.onUpdateScene(Engine.java:488)
    at org.anddev.andengine.engine.Engine.onUpdate(Engine.java:483)
    at org.anddev.andengine.engine.Engine.onTickUpdate(Engine.java:459)
    at org.anddev.andengine.engine.Engine$UpdateThread.run(Engine.java:685)

...which I'm assuming is because I'm removing the AnimatedSprite in the middle of its onUpdate(). How can I acheive what I want without this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谈情不如逗狗 2024-12-07 20:21:58

当从场景中分离精灵时,它应该在 runOnUpdateThread() 内部分离;

    public void onUpdate(float pSecondsElapsed) {
        if(explosion.getCurrentTileIndex() == 7){
            runOnUpdateThread(new Runnable() {
            @Override                
            public void run() {
              mScene.detachChild(explosion);
            }
           });                
        }
    }

while detach sprite from the scene it should be detached inside of runOnUpdateThread();

    public void onUpdate(float pSecondsElapsed) {
        if(explosion.getCurrentTileIndex() == 7){
            runOnUpdateThread(new Runnable() {
            @Override                
            public void run() {
              mScene.detachChild(explosion);
            }
           });                
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文