2012-06-21 111 views
0

我正在为一个类的网页工作,并试图使用ActionScript 3来处理导航。我对它的工作方式的理解是,当您单击顶部的链接时,它使用removeChild删除当前显示的内容,并使用addChild添加新页面的内容。Flash CS6 ActionScript 3错误#2025

它从最初的页面转到其中一个链接时正常工作。但每当我从一个网页,是不是主页到另一个页面去获取:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. at flash.display::DisplayObjectContainer/removeChild() at nutshellMathReCoded4_fla::MainTimeline/hideOtherPages() at 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 **** 
    } 


} 

回答

0

此代码看起来可怕,但我不会潜入因为这不是问题的优点。问题是你只是检查(在函数hideOtherPages())存在的对象,而不是如果他们被添加到舞台。你不能从舞台上移除一个不存在的对象,这就是为什么你会得到这个错误,并且只是说明了这一点。

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

并与每一个项目做到这一点。这是单调乏味的,所以我不会推荐它,但将它包含在教育目的中。

+0

精灵效果很好,谢谢你的帮助。我意识到代码非常业余,但这是我使用Flash的第一堂课,并且我一直在尝试学习ActionScript的一方,所以在这一点上大部分都是尝试和错误体验。但我感谢你的帮助。我记得有关精灵的阅读,但由于某种原因,直到你提到它之前,我从未想过要这样做。 –