Killing a Sprite in AndEngine

160 Views Asked by At

Hi im having a bit of problems getting my sprite to fade back in. Im using paralell entity modifiers, scaling and fading after which the sprite gets new X and Y cordinates and fades in and scales back up. It doesnt work and i think it might have something to do with the onUpdate method.

XOsprite = new Sprite(x, y, XO, engine.getVertexBufferObjectManager()) {

        @Override
        public boolean onAreaTouched(final TouchEvent te, final float xVal,
                final float yVal) {




            XOsprite.registerEntityModifier(downOut);  //kill sprite
            isKilled = true;
            XOsprite.registerUpdateHandler(new IUpdateHandler() {

                @Override
                public void reset() {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onUpdate(float pSecondsElapsed) {
                    // TODO Auto-generated method stub

                    totalElapsedTime += pSecondsElapsed;
                    if(totalElapsedTime >= 3.0f){

                        BaseGameActivity gameActivity = (BaseGameActivity) activity;
                        gameActivity.runOnUpdateThread(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                if(isKilled){
                                    reviveSprite();
                                    isKilled = false;
                                }
                            }
                        });

                    }
                    //reset();
                }
            });

            return true;

        }
    };





    XOsprite.registerEntityModifier(inUp);



    gameScene.attachChild(XOsprite);
    gameScene.registerTouchArea(XOsprite);

    return gameScene;
}

-edit- more code

public void reviveSprite(){

    setSprites();
    XOsprite.unregisterEntityModifier(downOut);
    XOsprite.registerEntityModifier(inUp);
}
public void setSprites(){

    if (rand.nextInt(2) == 0) {
        XO = X;
    } else {
        XO = O;
    }

        x = rand.nextInt(MainActivity.CAM_WIDTH);
        y = rand.nextInt(MainActivity.CAM_HEIGHT);

}
1

There are 1 best solutions below

3
On

you are already on the UpdateThread, so no need to do this

gameActivity.runOnUpdateThread(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            if(isKilled){
                                reviveSprite();
                                isKilled = false;
                            }
                        }
                    });

just do this

                            if(isKilled){
                                reviveSprite();
                                isKilled = false;
                            }