3 votes

Comment faire pour qu'un AnimatedSprite joue une fois puis se retire ?

J'ai une méthode 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() {

        }});
}

qui ne fonctionne pas. J'obtiens l'erreur suivante :

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)

...ce qui, je suppose, est dû au fait que j'enlève le AnimatedSprite au milieu de son onUpdate() . Comment puis-je obtenir ce que je veux sans ce problème ?

5voto

stackuser Points 239

Lorsque vous détachez un sprite de la scène, il doit être détaché à l'intérieur de runOnUpdateThread() ;

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X