Убийство спрайта в AndEngine

Привет, у меня есть небольшие проблемы с тем, чтобы мой спрайт снова исчезал. Я использую модификаторы сущности paralell, масштабирование и затухание, после чего спрайт получает новые координаты X и Y, исчезает и снова масштабируется. Это не работает, и я думаю, что это может быть связано с методом onUpdate.

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

-редактировать- больше кода

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

}

person HighMrSai    schedule 02.09.2013    source источник
comment
Вы делаете много ошибок в этом, поэтому, пожалуйста, четко объясните, что вы пытаетесь сделать?   -  person Siddharth    schedule 03.09.2013


Ответы (1)


вы уже находитесь в UpdateThread, так что не нужно этого делать

gameActivity.runOnUpdateThread(new Runnable() {

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

просто сделай это

                            if(isKilled){
                                reviveSprite();
                                isKilled = false;
                            }
person jmroyalty    schedule 03.09.2013
comment
я попробовал то, что вы сказали, но мой спрайт все еще не исчезает, я включил еще немного своего кода, может быть, проблема в модификаторах сущности? - person HighMrSai; 03.09.2013
comment
вы уверены, что reviveSprite() звонят? возможно, добавьте запись в журнал, чтобы быть уверенным - person jmroyalty; 03.09.2013
comment
да, я отладил его, и он вызывается по-видимому.. когда я пытаюсь произнести тост, он почему-то выдает ошибку - person HighMrSai; 04.09.2013