0

:D detach と attachChild に問題があります..

scene.registerUpdateHandler(new IUpdateHandler() {
        @Override
        public void reset() { }

        @Override
        public void onUpdate(final float pSecondsElapsed) {
// USELESS CODE
// USELESS CODE
// USELESS CODE     
            if (!SUPER){
                if (player.collidesWith(Blinky) ||
                    player.collidesWith(Pinky) ||
                    player.collidesWith(Inky) ||
                    player.collidesWith(Clyde)){
                        player.animate(new long[]{130,130,130,130,130,130}, 24, 29, false);
                        player.stopPlayer();
                }
            }
            else {
                if (player.collidesWith(Blinky)){
                    scene.detachChild(Blinky);
                    respawnGhost("Blinky");
                }
                else if (player.collidesWith(Pinky)){
                    scene.detachChild(Pinky);
                    respawnGhost("Pinky");
                }
                else if (player.collidesWith(Inky)){
                    scene.detachChild(Inky);
                    respawnGhost("Inky");
                }
                else if (player.collidesWith(Clyde)){
                    scene.detachChild(Clyde);
                    respawnGhost("Clyde");
                }
            }
        }
    });

このコードで私は切り離します..

そしてこれで:

private void respawnGhost(final String ghost){
    final Path RespawnPath = new Path(9).to(265, 295).to(225,295).to(225,255).to(305, 255).to(305, 295).to(225, 295).to(225,255).to(265,255).to(265,215);
    TimerHandler spriteTimerHandler;
    ITimerCallback Callback;

    this.getEngine().registerUpdateHandler(spriteTimerHandler = new TimerHandler(5,true,Callback = new ITimerCallback(){

        @Override
        public void onTimePassed(TimerHandler pTimerHandler) {


        if(ghost.compareTo("Blinky") == 0){
            scene.attachChild(Blinky);
            Blinky.registerEntityModifier(new PathModifier(10, RespawnPath, null, new IPathModifierListener() {
                @Override
                public void onPathStarted(final PathModifier pPathModifier, final IEntity pEntity) {

                }

                @Override
                public void onPathWaypointStarted(final PathModifier pPathModifier, final IEntity pEntity, final int pWaypointIndex) {

                }

                @Override
                public void onPathWaypointFinished(final PathModifier pPathModifier, final IEntity pEntity, final int pWaypointIndex) {

                }

                @Override
                public void onPathFinished(final PathModifier pPathModifier, final IEntity pEntity) {

                    Blinky.direction=4;
                    Blinky.ghostVel = (int)VELOCITY + 10;
                    Blinky.setVelocity((int)VELOCITY + 10,0);
                    Blinky.randDir = (int)(randRespawn.nextFloat() * 10)%3;
                }
            }));
        }

貼り直し...

しかし、OnTimePassed() が呼び出されると、TADAAAA! 野生の例外が現れました:V

java.lang.IllegalStateException: pEntity 'Ghost' には既に親 'Scene' があります。新しい親: 'Scene'! org.andengine.entity.Entity.assertEntityHasNoParent(Entity.java:1412) で blablabla....

しかし、私がコメントした場合:

//this.getEngine().registerUpdateHandler(spriteTimerHandler = new  TimerHandler(5,true,Callback = new ITimerCallback(){

    ////    @Override
    ////    public void onTimePassed(TimerHandler pTimerHandler) {

すべて正常に動作します...

誰かが私を助けることができますか?:)

ps: 本当に下手な英語でごめんなさい ç.ç

4

1 に答える 1