ArgumentError:错误#2025:提供的DisplayObject必须是调用者的子级

时间:2013-05-18 20:55:30

标签: actionscript-3

我正在试图摆脱一个对象,但它正在抛出一个错误而不确定是什么问题。

我得到的错误:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
    at flash.display::DisplayObjectContainer/removeChild()
    at SchoolBook_Final_fla::MainTimeline/garbage_cl_2()[SchoolBook_Final_fla.MainTimeline::frame2:98]
    at Function/SchoolBook_Final_fla:MainTimeline/choice_play_ev/SchoolBook_Final_fla:play_target()[SchoolBook_Final_fla.MainTimeline::frame2:81]

我的代码:

import flash.display.Sprite;
import flash.ui.Mouse;
import flash.events.Event;

var week_pick:Weekday_Choice = new Weekday_Choice ();
var weekdayArray: Array = new Array ();
var monday:Mon_D_but = new Mon_D_but ();
var tuesday:Tues_D_but = new Tues_D_but ();
var wednesday:Wed_D_but = new Wed_D_but ();
var thursday:Thurs_D_but = new Thurs_D_but ();
var friday:Fri_D_but = new Fri_D_but ();
var choice_play: Array = new Array ();

choice_play.push(monday, tuesday, wednesday, thursday, friday);
//Adding Week Pick
addChild(week_pick);
//Placing all the Buttons
choice_play[0].x = 73.1;
choice_play[0].y = 316.75;

choice_play[1].x = 251.9;
choice_play[1].y = 278.35;

choice_play[2].x = 399.95;
choice_play[2].y = 375.85;

choice_play[3].x = 345.2;
choice_play[3].y = 602.4;

choice_play[4].x = 80.15;
choice_play[4].y = 603.05;

for (var a = 0; a < choice_play.length; a++)
{
    //Asking all the Buttons to stop
    choice_play[a].alpha = 0;
    choice_play[a].stop();
}
//Event for the week pick to start
week_pick.addEventListener(Event.ENTER_FRAME, moveon);
//Getting the function started
function moveon(event:Event)
{
    if (week_pick.currentFrame == 103)
    {

        week_pick.stop();
        for (a = 0; a < choice_play.length; a++)
        {
            addChild(choice_play [a]);

        }
        //adding an Event listener for clicking the buttons
        this.addEventListener(MouseEvent.CLICK,choice_play_ev);


    }
}

function choice_play_ev(play_event: MouseEvent)
{
    trace ("Event gets added");
    trace (play_event.target);
    //Work if the target isn't the background clip
    if (play_event.target != week_pick)
    {
        trace (play_event.target);
        //Turn back the opacity for what ever was cliked on
        play_event.target.alpha = 1;
        //asking the choice to play it's animation
        play_event.target.addEventListener(Event.ENTER_FRAME, play_target);
        this.removeEventListener(MouseEvent.CLICK,choice_play_ev);
        function play_target(play_event_cl:Event)
        {

            play_event_cl.target.play ();
            if (play_event_cl.target.currentFrame == 15)
            {
                //remove the [;ace event listener once the animation is done
                play_event.target.removeEventListener(Event.ENTER_FRAME, play_target);
                garbage_cl_2 ();
            }
        }
    }
}

function garbage_cl_2 ()
{

    trace("it works");
    for (a = 0; a < choice_play.length; a++)
    {
        //remove all the choices from the display list
        removeChild(choice_play [a]);
    }
    //Remove all the choices from the array for better garbage cleaning
    choice_play.splice(0, choice_play.length);
    removeChild(week_pick);
    week_pick.removeEventListener(Event.ENTER_FRAME, moveon);
    trace("The choice_play is " + choice_play.length);
    gotoAndStop(3);

}

有人可以帮我解决这个问题吗?还告诉我为什么会抛出错误?

1 个答案:

答案 0 :(得分:0)

您在garbage_cl_2 ()函数

中的循环
for (a = 0; a < choice_play.length; a++)
{
    //remove all the choices from the display list
    removeChild(choice_play [a]);
}

和/或调用removeChild(week_pick);尝试删除不是当前MovieClip对象的直接子项的MovieClip。当前剪辑是其时间轴包含具有garbage_cl_2 ()函数代码的帧的剪辑。 removeChild()方法只能删除DisplayObjectContainer实例的直接子节点 - 如果当前剪辑不是这些剪辑的直接父节点,则需要指定父剪辑,如下所示:

parentclip.removeChild ( ... );