0

我正在为一门课程制作网页,并尝试使用 ActionScript 3 进行导航。我对它应该如何工作的理解是,当您单击顶部的链接时,它会使用 removeChild 删除当前显示的所有内容,并且使用 addChild 添加新页面的内容。

从初始页面转到其中一个链接时,它工作正常。但是每当我从一个不是主页的页面转到另一个页面时,我都会得到:

ArgumentError:错误 #2025:提供的 DisplayObject 必须是调用者的子对象。在 flash.display::DisplayObjectContainer/removeChild() 在 nutshellMathReCoded4_fla::MainTimeline/hideOtherPages() 在 nutshellMathReCoded4_fla::MainTimeline/runSubtraction()

这是代码:

stop();
// Flash Imports
import flash.events.MouseEvent;
import flash.events.Event;
import flash.media.SoundMixer;

//Page Components //
// Home //
// Links
// Create Header & Nav //
// Logo Link
    var headerLogo:logoMainPage = new logoMainPage();
    headerLogo.x = 252.85;
    headerLogo.y = 18.00;
    //Addition Link
    var additionLink:addPageLink = new addPageLink();
    additionLink.x = 142.35;
    additionLink.y = 96.00;
    //Subtraction Link
    var subtractionLink:subPageLink = new subPageLink();
    subtractionLink.x = 208.60;
    subtractionLink.y = 144.60;
    // Multiplication Link
    var multiplicationLink:mulPageLink = new mulPageLink();
    multiplicationLink.x = 397.80;
    multiplicationLink.y = 100.00;
    // Division Link
    var divisionLink:divPageLink = new divPageLink();
    divisionLink.x = 597.95;
    divisionLink.y = 144.60;

//Animation
    var animation:mainAnimation = new mainAnimation();
    animation.x = 99.90;
    animation.y = 244.00;

//Addition // 
    var addSimpleX:additionSimpleX = new additionSimpleX();
    addSimpleX.x = 41;
    addSimpleX.y = 395.95;

    var addSimpleY:additionSimpleY = new additionSimpleY();
    addSimpleY.x = 364;
    addSimpleY.y = 395.95;

    var addSimpleAnswer:additionSimpleAnswer = new additionSimpleAnswer();
    addSimpleAnswer.x = 701;
    addSimpleAnswer.y = 395.95;

    var additionAddSign:additionSign = new additionSign();
    additionAddSign.x = 276.55;
    additionAddSign.y = 360.20;

    var additionEqualsSign:equalsSign = new equalsSign();
    additionEqualsSign.x = 613.95;
    additionEqualsSign.y = 360.20;

    var addSum:additionSummary = new additionSummary();
    addSum.x = 178.25;
    addSum.y = 202;

    var addTryOut:tryItOut = new tryItOut();
    addTryOut.x = 205.70;
    addTryOut.y = 475.65;

    var addDDLink:digDeeperLink = new digDeeperLink();
    addDDLink.x = 274.95;
    addDDLink.y = 696;

    var addTQLink:quizLink = new quizLink();
    addTQLink.x = 465;
    addTQLink.y = 696.50;

//Addition Deeper
    var addLong:additionExtended = new additionExtended();
    addLong.x = 193.00;
    addLong.y = 323.00;

    var addDDSum:additionDDSummary = new additionDDSummary();
    addDDSum.x = 222.40;
    addDDSum.y = 201.20;

    var addDDB2B:backToBasicsLink = new backToBasicsLink();
    addDDB2B.x = 271.95;
    addDDB2B.y = 696;

    var addDDTQ:quizLink = new quizLink();
    addDDTQ.x = 468;
    addDDTQ.y = 696;

//Subtraction
    var subSimpleX:subtractionSimpleX = new subtractionSimpleX();
    subSimpleX.x = 44;
    subSimpleX.y = 408.50;

    var subSimpleY:subtractionSimpleY = new subtractionSimpleY();
    subSimpleY.x = 367;
    subSimpleY.y = 408.50;

    var subSimpleAnswer:subtractionSimpleAnswer = new subtractionSimpleAnswer();
    subSimpleAnswer.x = 692.95;
    subSimpleAnswer.y = 408.50;

    var subtractionEqualsSign:equalsSign = new equalsSign();
    subtractionEqualsSign.x = 612.80;
    subtractionEqualsSign.y = 372.95

    var subtractionSubSign:subtractionSign = new subtractionSign();
    subtractionSubSign.x = 280.85;
    subtractionSubSign.y = 371.95;

    var subTryOut:tryItOut = new tryItOut();
    subTryOut.x = 221.8;
    subTryOut.y = 477.95;

    var subDDLink:digDeeperLink = new digDeeperLink();
    subDDLink.x = 274.95;
    subDDLink.y = 696;

    var subTQLink:quizLink = new quizLink();
    subTQLink.x = 465;
    subTQLink.y = 696.50;

    var subSum:subtractionSummary = new subtractionSummary();
    subSum.x = 147.30;
    subSum.y = 210.05;

// Subtraction Dig Deeper

    var subBudget:budget = new budget();
    subBudget.x = 367.95;
    subBudget.y = 400.90;

    var subExpenses:expenses = new expenses();
    subExpenses.x = 204.00;
    subExpenses.y = 513.40;

    var subDDT1:subtractionDD1 = new subtractionDD1();
    subDDT1.x = 264.05;
    subDDT1.y = 211;

    var subDDT2:subtractionDD2 = new subtractionDD2();
    subDDT2.x = 206.65;
    subDDT2.y = 351;

    var subDDT3:subtractionDD3 = new subtractionDD3();
    subDDT3.x = 131.80;
    subDDT3.y = 474.95;

    var subDDT4:subtractionDD4 = new subtractionDD4();
    subDDT4.x = 291.00;
    subDDT4.y = 463;

    var subCheckBudgetLink:checkBudgetLink = new checkBudgetLink();
    subCheckBudgetLink.x = 437;
    subCheckBudgetLink.y = 609.5;

    var subB2BLink:backToBasicsLink = new backToBasicsLink();
    subB2BLink.x = 271.95;
    subB2BLink.y = 696;

    var subDDTQLink:quizLink = new quizLink();
    subDDTQLink.x = 468;
    subDDTQLink.y = 696;

//Multiplication
    var mulSimpleX:multiplicationSimpleX = new multiplicationSimpleX();
    mulSimpleX.x = 30.85;
    mulSimpleX.y = 395.35;

    var mulSimpleY:multiplicationSimpleY = new multiplicationSimpleY();
    mulSimpleY.x = 370.85;
    mulSimpleY.y = 395.35;

    var mulSimpleAnswer:multiplicationSimpleAnswer = new multiplicationSimpleAnswer();
    mulSimpleAnswer.x = 691.90;
    mulSimpleAnswer.y = 395.35;

    var multiplicationMulSign:multiplicationSign = new multiplicationSign();
    multiplicationMulSign.x = 284.60;
    multiplicationMulSign.y = 365.95;

    var mulEqualsSign:equalsSign = new equalsSign();
    mulEqualsSign.x = 609.80;
    mulEqualsSign.y = 356.95;

    var mulSummary:multiplicationSummary = new multiplicationSummary();
    mulSummary.x = 145.30;
    mulSummary.y = 202.40;

    var mulTryOut:tryItOut = new tryItOut();
    mulTryOut.x = 218.80;
    mulTryOut.y = 461.95;

    var mulDDLink:digDeeperLink = new digDeeperLink();
    mulDDLink.x = 274.95;
    mulDDLink.y = 696;

    var mulTQLink:quizLink = new quizLink();
    mulTQLink.x = 465.00;
    mulTQLink.y = 696;



// Multiplication Deeper

    var mulDD1:multiplicationDD1 = new multiplicationDD1();
    mulDD1.x = 241.15;
    mulDD1.y = 209;

    var mulDD2:multiplicationDD2 = new multiplicationDD2();
    mulDD2.x = 297.05;
    mulDD2.y = 350.40;

    var mulDD3:multiplicationDD3 = new multiplicationDD3();
    mulDD3.x = 316.75;
    mulDD3.y = 393.65;

    var mulDD4:multiplicationDD4 = new multiplicationDD4();
    mulDD4.x = 297.55;
    mulDD4.y = 436.90;

    var mulB2BLink:backToBasicsLink = new backToBasicsLink();
    mulB2BLink.x = 271.95;
    mulB2BLink.y = 696;

    var mulDDTQL:quizLink = new quizLink();
    mulDDTQL.x = 468;
    mulDDTQL.y = 696;

// Division
    var divSimpleX:divisionSimpleX = new divisionSimpleX();
    divSimpleX.x = 42;
    divSimpleX.y = 397.5;

    var divSimpleY:divisionSimpleY = new divisionSimpleY();
    divSimpleY.x = 366.95;
    divSimpleY.y = 397.50;

    var divSimpleAnswer:divisionSimpleAnswer = new divisionSimpleAnswer();
    divSimpleAnswer.x = 698.95;
    divSimpleAnswer.y = 397.50;

    var divisionDivSign:divisionSign = new divisionSign();
    divisionDivSign.x = 277.80;
    divisionDivSign.y = 360.95;

    var divEqualsSign:equalsSign = new equalsSign();
    divEqualsSign.x = 609.80;
    divEqualsSign.y = 361.95;

    var divSummary:divisionSummary = new divisionSummary();
    divSummary.x = 112.50;
    divSummary.y = 202.20;

    var divTryOut:tryItOut = new tryItOut();
    divTryOut.x = 218.80;
    divTryOut.y = 466.95;

    var divDDLink:digDeeperLink = new digDeeperLink();
    divDDLink.x = 274.95;
    divDDLink.y = 696;

    var divTQLink:quizLink = new quizLink();
    divTQLink.x = 274.95;
    divTQLink.y = 696;

// Division Deeper

    var divDD1:divisionDD1 = new divisionDD1();
    divDD1.x = 239.60;
    divDD1.y = 215.00;

    var divDD2:divisionDD2 = new divisionDD2();
    divDD2.x = 328.65;
    divDD2.y = 336.70;

    var divDD3:divisionDD3 = new divisionDD3();
    divDD3.x = 308.95;
    divDD3.y = 381.20;

    var divB2BLink:backToBasicsLink = new backToBasicsLink();
    divB2BLink.x = 271.95;
    divB2BLink.y = 696;

    var divDDTQLink:quizLink = new quizLink();
    divDDTQLink.x = 468;
    divDDTQLink.y = 696;


// Quiz
    //Title
    var titleQuiz:quizTitle = new quizTitle();
    titleQuiz.x = 419.40;
    titleQuiz.y = 192;
    // Random Number Backgrounds
    var quizBG1:shortTextBG = new shortTextBG();
    quizBG1.x = 44.9;
    quizBG1.y = 283;

    var quizBG2:shortTextBG = new shortTextBG();
    quizBG2.x = 368.95;
    quizBG2.y = 283;

    var quizBG3:shortTextBG = new shortTextBG();
    quizBG3.x = 44.9;
    quizBG3.y = 360.25;

    var quizBG4:shortTextBG = new shortTextBG();
    quizBG4.x = 368.95;
    quizBG4.y = 360.25;

    var quizBG5:shortTextBG = new shortTextBG();
    quizBG5.x = 44.90;
    quizBG5.y = 440.20;

    var quizBG6:shortTextBG = new shortTextBG();
    quizBG6.x = 368.95;
    quizBG6.y = 440.20;

    var quizBG7:shortTextBG = new shortTextBG();
    quizBG7.x = 44.90;
    quizBG7.y = 518.80;

    var quizBG8:shortTextBG = new shortTextBG();
    quizBG8.x = 368.95;
    quizBG8.y = 518.80

    // Signs
    var quizAddSign:additionSign = new additionSign();
    quizAddSign.x = 280.05;
    quizAddSign.y = 251.90;

    var quizSubSign:subtractionSign = new subtractionSign();
    quizSubSign.x = 281.40;
    quizSubSign.y = 323.80;

    var quizMulSign:multiplicationSign = new multiplicationSign();
    quizMulSign.x = 288.20;
    quizMulSign.y = 414.05;

    var quizDivSign:divisionSign = new divisionSign();
    quizDivSign.x = 280.05;
    quizDivSign.y = 489.20;

    var quizAddEqualsSign:equalsSign = new equalsSign();
    quizAddEqualsSign.x = 603.90;
    quizAddEqualsSign.y = 251.90;

    var quizSubEqualsSign:equalsSign = new equalsSign();
    quizSubEqualsSign.x = 603.90;
    quizSubEqualsSign.y = 330.55;

    var quizMulEqualsSign:equalsSign = new equalsSign();
    quizMulEqualsSign.x = 603.90;
    quizMulEqualsSign.y = 409.20;

    var quizDivEqualsSign:equalsSign = new equalsSign();
    quizDivEqualsSign.x = 603.90;
    quizDivEqualsSign.y = 489.20;

    // Check quiz
    var quizCheck:checkQuiz = new checkQuiz();
    quizCheck.x = 369.95;
    quizCheck.y = 626.60;

    var answerWrong:wrongAnswer = new wrongAnswer();
    var answerCorrect:correctAnswer = new correctAnswer();


// Home Page //;

// Create Header & Nav //
// Logo
addChild(headerLogo);
addChild(additionLink);
addChild(subtractionLink);
addChild(multiplicationLink);
addChild(divisionLink);
addChild(animation);



headerLogo.addEventListener(MouseEvent.CLICK, runIndexPage);
function runIndexPage(e:MouseEvent):void
{
    // Hide other Pages
    hideOtherPages();

    addChild(animation);
    animation.gotoAndPlay(1);
}

// Addition Page //
additionLink.addEventListener(MouseEvent.CLICK, runAddition);
function runAddition(e:MouseEvent):void
{
    hideOtherPages();
    createAdditionPage();


}

subtractionLink.addEventListener(MouseEvent.CLICK, runSubtraction);
function runSubtraction(e:MouseEvent):void
{
        hideOtherPages();
        createSubtractionPage();
}

multiplicationLink.addEventListener(MouseEvent.CLICK, runMultiplication);
function runMultiplication(e:MouseEvent):void
{
        hideOtherPages();
        createMultiplicationPage();
}

divisionLink.addEventListener(MouseEvent.CLICK, runDivision);
function runDivision(e:MouseEvent):void
{
    hideOtherPages();
    createDivisionPage();
}


//Global Functions
function createAdditionPage():void
{
    addChild(addSimpleX);
    addChild(addSimpleY);
    addChild(addSimpleAnswer);
    addChild(additionAddSign);
    addChild(additionEqualsSign);
    addChild(addSum);
    addChild(addTryOut);
    addChild(addDDLink);
    addChild(addTQLink);
}

function createSubtractionPage():void
{
        addChild(subSimpleX);
        addChild(subSimpleY);
        addChild(subSimpleAnswer);
        addChild(subtractionSubSign);
        addChild(subtractionEqualsSign);
        addChild(subSum);
        addChild(subTryOut);
        addChild(subDDLink);
        addChild(subTQLink);
}

function createMultiplicationPage():void
{
        addChild(mulSimpleX);
        addChild(mulSimpleY);
        addChild(mulSimpleAnswer);
        addChild(multiplicationMulSign);
        addChild(mulEqualsSign);
        addChild(mulSummary);
        addChild(mulTryOut);
        addChild(mulDDLink);
        addChild(mulTQLink);
}

function createDivisionPage():void
{
        addChild(divSimpleX);
        addChild(divSimpleY);
        addChild(divSimpleAnswer);
        addChild(divisionDivSign);
        addChild(divEqualsSign);
        addChild(divSummary);
        addChild(divTryOut);
        addChild(divDDLink);
        addChild(divTQLink);
}

function hideOtherPages():void
{
    if(animation)
    {
        removeChild(animation);
        SoundMixer.stopAll();
    }

    else if(addSimpleX)
    {

        removeChild(addSimpleX);
        removeChild(addSimpleY);
        removeChild(addSimpleAnswer);
        removeChild(additionAddSign);
        removeChild(additionEqualsSign);
        removeChild(addSum);
        removeChild(addTryOut);
        removeChild(addDDLink);
        removeChild(addTQLink);
    }

    else if(addLong)
    {
        removeChild(addLong);
        removeChild(addDDSum);
        removeChild(addDDB2B);
        removeChild(addDDTQ);
    }

    else if(subSimpleX)
    {
        removeChild(subSimpleX);
        removeChild(subSimpleY);
        removeChild(subSimpleAnswer);
        removeChild(subtractionSubSign);
        removeChild(subtractionEqualsSign);
        removeChild(subSum);
        removeChild(subTryOut);
        removeChild(subDDLink);
        removeChild(subTQLink);
    }

    else if(subBudget)
    {
        removeChild(subBudget);
        removeChild(subExpenses);
        removeChild(subDDT1);
        removeChild(subDDT2);
        removeChild(subDDT3);
        removeChild(subDDT4);
        removeChild(subCheckBudgetLink);
        removeChild(subB2BLink);
        removeChild(subDDTQLink);
    }

    else if(mulSimpleX)
    {
        removeChild(mulSimpleX);
        removeChild(mulSimpleY);
        removeChild(mulSimpleAnswer);
        removeChild(multiplicationMulSign);
        removeChild(mulEqualsSign);
        removeChild(mulSummary);
        removeChild(mulDDLink);
        removeChild(mulTQLink);     
    }

    else if(mulDD1)
    {
        removeChild(mulDD1);
        removeChild(mulDD2);
        removeChild(mulDD3);
        removeChild(mulDD4);
        removeChild(mulB2BLink);
        removeChild(mulDDTQL);
    }

    else if(divSimpleX)
    {
        removeChild(divSimpleX);
        removeChild(divSimpleY);
        removeChild(divSimpleAnswer);
        removeChild(divisionDivSign);
        removeChild(divEqualsSign);
        removeChild(divSummary);
        removeChild(divTryOut);
        removeChild(divDDLink);
        removeChild(divTQLink);
    }

    else if(divDD1)
    {
        removeChild(divDD1);
        removeChild(divDD2);
        removeChild(divDD3);
        removeChild(divB2BLink);
        removeChild(divDDTQLink);
    }

    else if(titleQuiz)
    {
        removeChild(titleQuiz);
        removeChild(quizBG1);
        removeChild(quizBG2);
        removeChild(quizBG3);
        removeChild(quizBG4);
        removeChild(quizBG5);
        removeChild(quizBG6);
        removeChild(quizBG7);
        removeChild(quizBG8);
        removeChild(quizAddSign);
        removeChild(quizSubSign);
        removeChild(quizMulSign);
        removeChild(quizDivSign);
        removeChild(quizAddEqualsSign);
        removeChild(quizSubEqualsSign);
        removeChild(quizMulEqualsSign);
        removeChild(quizDivEqualsSign);
        removeChild(quizCheck);

        //Dynamic Quiz Removal Section ****
    }


}
4

1 回答 1

0

这段代码看起来很可怕,但我不会深入研究它,因为这不是问题的优点。问题是您只检查(在函数 hideOtherPages() 中)对象是否存在,而不是如果将它们添加到 Stage。您无法从舞台上移除不存在的对象,这就是您收到此错误的原因,它说明了这一点。

  1. 您可以在尝试删除对象之前检查您的对象是否已添加到舞台。
  2. 您可以通过简单的循环从对象中删除所有子对象。

在这种情况下,第二个选项是最好的。您将创建一个 Sprite,然后...

var myContainer:Sprite = new Sprite();
addChild(myContainer);

// Here you are adding children/first set of visible objects
myContainer.addChild(myObject);
// ...

现在,在您将新的一组对象添加到容器之前,您可以调用“clearContainer()”函数来删除以前的对象。

function clearContainer() : void {
    while(myContainer.numChildren) {
        myContainer.removeChildAt(0);
    }
}

因此,您的代码将大大减少,因为您不会被迫手动删除每个项目...

或者,如果您想保持蛮力,您可以在手动删除对象之前检查对象是否存在,您可以使用函数 getChildByName(name:String) 来做到这一点。您可以为您的对象设置一个属性“名称”,然后检查“getChildByName”是否会返回对象或 null,如果它是一个对象,您将删除它。所以一开始它看起来像这样:

var divisionLink:divPageLink = new divPageLink();
divisionLink.x = 597.95;
divisionLink.y = 144.60;
divisionLink.name = "divisionLink"; // setting a name

您的删除将如下所示:

else if(divisionLink && this.getChildByName("divisionLink"))
{
    removeChild(divisionLink);
}

并对每个项目执行此操作。这既乏味又缓慢,因此我不推荐它,但出于教育目的将其包括在内。

于 2012-06-21T23:12:24.107 回答