Можете ли вы сказать мне, что я виноват?это о том, если вложенный (flash cs6 as3) - PullRequest
2 голосов
/ 20 сентября 2019

Я уже проверил, но все еще не так?это комментарий:

ArgumentError: Ошибка # 2025: предоставленный объект DisplayObject должен быть дочерним по отношению к вызывающей стороне.на flash.display :: DisplayObjectContainer / removeChild () на gamebalapanoret_fla :: MainTimeline / batas ()

я хочу сделать if nested

, когда количество очков кратно 2, а затем сделать var jwbn .и чем jwbn удалить при hittest batas_mc .хотя я через removelistener это не работает.но я получаю ошибку, когда ставлю removelistener.Вы можете сказать мне, где моя вина?это мой код:


//membuat object batu
var Batumc:batu_mc = new batu_mc(); // creates a instance of the movieclip, i.e, an object
var Batumc1:batu_mc = new batu_mc();

        addChild(Batumc);       
        addChild(Batumc1);


        Batumc.x = 350;
        Batumc.y = 50;

        Batumc1.x = 500;
        Batumc1.y = 50;

//batas batu
var BatasBatu = Batumc.width/12;


rumput1_mc.addEventListener(Event.ENTER_FRAME, rumput);
    function rumput(e:Event):void{
        //batas gerak pemain
        while (rumput1_mc.hitTestPoint(pemain.x+jarakKanan, pemain.y, true)) {
            pemain.x++;
        }
        while (rumput1_mc.hitTestPoint(pemain.x-jarakKiri, pemain.y, true)) {
            pemain.x--;
        }
        jwbn.y += kecepatanJawab;
    }


//var jwbn
var jwbn:jwb = new jwb();
var BatasJwb = jwbn.width/6;



batas_mc.addEventListener(Event.ENTER_FRAME, batas);
    function batas(e:Event):void{       
        if(batas_mc.hitTestPoint(Batumc.x, Batumc.y+BatasBatu, true)) {
            //menghitung banyak tumbukan
            score += 1;
            point.text = score.toString();

            if(score % 2 == 0){         


            //model soal
            Soal_mc.angka1.text = mtk1.toString();
            Soal_mc.op.text = "+";
            Soal_mc.angka2.text = mtk2.toString();

            //soal muncul
            TweenLite.to(Soal_mc, 1, {x:350 ,y:180, alpha:1, ease:Expo.easeOut});


            //jawaban muncul
            addChild(jwbn);
            jwbn.x = 350;
            jwbn.y = 50;


            }


            removeChild(Batumc);
            removeChild(Batumc1);

            addChild(Batumc);
            addChild(Batumc1);

            Batumc.x = 350;
            Batumc.y = 50;

            Batumc1.x = 500;
            Batumc1.y = 50;


        }

        if(batas_mc.hitTestPoint(jwbn.x, jwbn.y+BatasJwb, true)) {
                removeChild(jwbn);
            }

        if(pemain.hitTestObject(Batumc)){
            Batumc.y -= kecepatanRintangan;
            pemain.gotoAndPlay("jatuh");
            Batumc1.y -= kecepatanRintangan;

            removeChild(Batumc);
            removeChild(Batumc1);
            rumput1_mc.removeEventListener(Event.ENTER_FRAME, rumput);
            pemain.removeEventListener(Event.ENTER_FRAME, eframe);
            stage.removeEventListener(KeyboardEvent.KEY_UP, buttonUp);
            stage.removeEventListener(KeyboardEvent.KEY_DOWN, buttonpress);
            batas_mc.removeEventListener(Event.ENTER_FRAME, batas);
            bt_home.removeEventListener(MouseEvent.CLICK, backhome);
            Soal_mc.removeEventListener(Event.ENTER_FRAME, soal);
            gotoAndStop("kalah","lose");

        }
        else if(pemain.hitTestObject(Batumc1)){
            Batumc.y -= kecepatanRintangan;
            pemain.gotoAndPlay("jatuh");
            Batumc1.y -= kecepatanRintangan;

            removeChild(Batumc);
            removeChild(Batumc1);
            rumput1_mc.removeEventListener(Event.ENTER_FRAME, rumput);
            pemain.removeEventListener(Event.ENTER_FRAME, eframe);
            stage.removeEventListener(KeyboardEvent.KEY_UP, buttonUp);
            stage.removeEventListener(KeyboardEvent.KEY_DOWN, buttonpress);
            batas_mc.removeEventListener(Event.ENTER_FRAME, batas);
            bt_home.removeEventListener(MouseEvent.CLICK, backhome);
            Soal_mc.removeEventListener(Event.ENTER_FRAME, soal);
            gotoAndStop("kalah","lose");            
        }

    }


1 Ответ

0 голосов
/ 20 сентября 2019

"Поставляемый объект DisplayObject должен быть дочерним по отношению к вызывающей стороне."

Посмотрите на свой код: (сокращено) ...

batas_mc.addEventListener(Event.ENTER_FRAME, batas);

function batas(e:Event):void
{
    removeChild(Batumc);
}

Итак, batas_mc - это вызывающая функция batas, которую вы сейчас сообщаете removeChild(Batumc);, но проблема в том, что вы никогда не сказали batas_mc.addChild(Batumc);.То, что batas_mc не может удалить то, чего у него нет ( например: не содержится / не добавлено внутри этого MC).

Возможное решение : (не проверено) ...

Заменить

batas_mc.addEventListener(Event.ENTER_FRAME, batas);

приведенным ниже кодом (добавьте прослушиватель событий в саму сцену, а не batas_mc).

addEventListener(Event.ENTER_FRAME, batas);
//stage.addEventListener(Event.ENTER_FRAME, batas); //# or try this
...