2014-11-27 7 views
0

Итак, у меня есть эта мини-игра внутри моей основной шкалы времени. Мини-игра создает кучу объектов динамически внутри массива, используя addChild (новый a0), новый a1, новый a2 и т. Д. В любом случае в конце игры есть возможность либо перезапустить (сбрасывает оценки и возвращается к исходному фрейму) или закончил (возвращает несколько кадров к «главному экрану», который находится на другом уровне и возвращает несколько кадров. Если я выберу любые параметры, любой из объектов, которые не были удалены из игры (получение соответствия), выходите на сцену даже при перезапуске или возврате к основному фрейму. Я пробовал различные методы вызова removeChild, устанавливая массивы в пустые, а что нет, и я не могу понять, как их удалить. Я покажу здесь, я получаю эту ошибку:Flash CS3 Удаление объектов на этапе

ArgumentError: Ошибка # 2025: поставляемый DisplayObject должен быть дочерним элементом вызывающего. at flash.display :: DisplayObjectContaine г/RemoveChild() в mousiesDay_fla :: MainTimeline/clearGame() [mousiesDay_fla.MainTimeline :: frame258: 11] в mousiesDay_fla :: MainTimeline/TryAgain() [mousiesDay_fla.MainTimeline :: frame258: 29]

Здесь это код

stop(); 
scoreWindow.visible = false; 
scoreWindowText.visible = false; 
finBtn.visible = false; 
tryBtn.visible = false; 
finBtn.removeEventListener(MouseEvent.CLICK, finished); 
tryBtn.removeEventListener(MouseEvent.CLICK, tryAgain); 

function clearGame() { 
    for(var i:int = 0; i < numClips; i++) { 
     removeChild(myClip[i]); 

    } 
    myClip.length = 0; 
    scoreWindow.visible = false; 
    scoreWindowText.visible = false; 
    finBtn.visible = false; 
    tryBtn.visible = false; 
    finBtn.removeEventListener(MouseEvent.CLICK, finished); 
    tryBtn.removeEventListener(MouseEvent.CLICK, tryAgain); 
} 

function finished(evt:MouseEvent) { 
    clearGame(); 
    gotoAndPlay(256); 
} 

function tryAgain(evt:MouseEvent) { 
    clearGame(); 
    gotoAndPlay(257); 
} 

backBtn.addEventListener(MouseEvent.CLICK, goBack); 

function goBack(evt:MouseEvent) { 
    gotoAndPlay(256); 
} 

import flash.utils.*; 

var myTimer:Timer = new Timer(1000); 
myTimer.addEventListener("timer", timedFunction); 
myTimer.start(); 

function timedFunction(eventArgs:TimerEvent) { 
     var tc:int= 31 - myTimer.currentCount; 
     pTime.text = tc.toString(); 
     if (myTimer.currentCount > 30) { 
      for (var k:Number = 0; k < numClips; k++) { 
       myClip[k].removeEventListener("mouseDown", pieceMove); 
       myClip[k].removeEventListener("mouseUp", pieceMove); 
      } 
      myTimer.reset(); 
      myTimer.stop(); 
      scoreWindow.visible = true; 
      scoreWindowText.visible = true; 
      addChild(scoreWindow); 
      addChild(scoreWindowText); 
      scoreWindowText.text = "Congratulations. You got " + upgameScore + "/10. \nClick FINISHED to go back or TRY AGAIN to restart."; 
      finBtn.visible = true; 
      finBtn.addEventListener(MouseEvent.CLICK, finished); 
      addChild(finBtn); 
      tryBtn.visible = true; 
      tryBtn.addEventListener(MouseEvent.CLICK, tryAgain); 
      addChild(tryBtn); 
     } 
    } 

var mySound:Sound = new correctSound(); 

upgameScore = 0; 

var numClips:Number = 7; 

var myClip = new Array(numClips); 

myClip[0] = addChild(new a0()); 
myClip[1] = addChild(new a1()); 
myClip[2] = addChild(new a2()); 
myClip[3] = addChild(new a3()); 
myClip[4] = addChild(new a4()); 
myClip[5] = addChild(new a5()); 
myClip[6] = addChild(new a6()); 
//myClip[7] = addChild(new a7()); 
//myClip[8] = addChild(new a8()); 
//myClip[9] = addChild(new a9()); 

myClip[0].name = "piece0"; 
myClip[1].name = "piece1"; 
myClip[2].name = "piece2"; 
myClip[3].name = "piece3"; 
myClip[4].name = "piece4"; 
myClip[5].name = "piece5"; 
myClip[6].name = "piece6"; 
//myClip[7].name = "piece7"; 
//myClip[8].name = "piece8"; 
//myClip[9].name = "piece9"; 

var nph = new Array(numClips); 

nph[0] = nph0_mc; 
nph[1] = nph1_mc; 
nph[2] = nph2_mc; 
nph[3] = nph3_mc; 
nph[4] = nph4_mc; 
nph[5] = nph5_mc; 
nph[6] = nph6_mc; 
//nph[7] = nph7_mc; 
//nph[8] = nph8_mc; 
//nph[9] = nph9_mc; 

var tpg = new Array(numClips); 

tpg[0] = tpg0_mc; 
tpg[1] = tpg1_mc; 
tpg[2] = tpg2_mc; 
tpg[3] = tpg3_mc; 
tpg[4] = tpg4_mc; 
tpg[5] = tpg5_mc; 
tpg[6] = tpg6_mc; 
//tpg[7] = tpg7_mc; 
//tpg[8] = tpg8_mc; 
//tpg[9] = tpg9_mc; 

var x0 = myClip[0].x = Math.floor(Math.random()*(1+530-20))+20;//Math.random()*400+50; 
var y0 = myClip[0].y = Math.floor(Math.random()*(1+380-20))+20;//Math.random()*50+50; 
var x1 = myClip[1].x = Math.floor(Math.random()*(1+530-20))+20;//Math.random()*400+50; 
var y1 = myClip[1].y = Math.floor(Math.random()*(1+380-20))+20;//Math.random()*50+50; 
var x2 = myClip[2].x = Math.floor(Math.random()*(1+530-20))+20;//Math.random()*400+50; 
var y2 = myClip[2].y = Math.floor(Math.random()*(1+380-20))+20;//Math.random()*50+50; 
var x3 = myClip[3].x = Math.floor(Math.random()*(1+530-20))+20;//Math.random()*400+50; 
var y3 = myClip[3].y = Math.floor(Math.random()*(1+380-20))+20;//Math.random()*50+50; 
var x4 = myClip[4].x = Math.floor(Math.random()*(1+530-20))+20;//Math.random()*400+50; 
var y4 = myClip[4].y = Math.floor(Math.random()*(1+380-20))+20;//Math.random()*50+50; 
var x5 = myClip[5].x = Math.floor(Math.random()*(1+530-20))+20;//Math.random()*400+50; 
var y5 = myClip[5].y = Math.floor(Math.random()*(1+380-20))+20;//Math.random()*50+50; 
var x6 = myClip[6].x = Math.floor(Math.random()*(1+530-20))+20;//Math.random()*400+50; 
var y6 = myClip[6].y = Math.floor(Math.random()*(1+380-20))+20;//Math.random()*50+50; 
/*var x7 = myClip[7].x = Math.floor(Math.random()*(1+530-20))+20;//Math.random()*400+50; 
var y7 = myClip[7].y = Math.floor(Math.random()*(1+380-20))+20;//Math.random()*50+50; 
var x8 = myClip[8].x = Math.floor(Math.random()*(1+530-20))+20;//Math.random()*400+50; 
var y8 = myClip[8].y = Math.floor(Math.random()*(1+380-20))+20;//Math.random()*50+50; 
var x9 = myClip[9].x = Math.floor(Math.random()*(1+530-20))+20;//Math.random()*400+50; 
var y9 = myClip[9].y = Math.floor(Math.random()*(1+380-20))+20;//Math.random()*50+50;*/ 

var j:Number; 

for (var k:Number = 0; k < numClips; k++) { 
    myClip[k].addEventListener("mouseDown", pieceMove); 
    myClip[k].addEventListener("mouseUp", pieceMove); 
} 

function pieceMove(evt:Event):void { 
    if (evt.type == "mouseDown") { 
     //mySound.play(); 
     evt.target.startDrag(); 
    } 
    else if (evt.type == "mouseUp") { 
     //mySound.play(); 
     evt.target.stopDrag(); 

for (j = 0; j < numClips; j++) { 
    if (evt.target.name == "piece" + j && 
     evt.target.hitTestObject(nph[j]) == true) { 
      removeChild(myClip[j]); 
      nph[j].alpha = 0; 
      tpg[j].alpha = 100; 
      if (j == 2) { 
       setChildIndex(tpg[j], 1); 
      } 

      upgameScore++; 
     } 
    else if (evt.target.name == "piece" + j) { 
     evt.target.x = Math.floor(Math.random()*(1+530-20))+20;//Math.random()*400+50; 
     evt.target.y = Math.floor(Math.random()*(1+380-20))+20;//Math.random()*50+50; 
    } 
} 

scor.text = upgameScore.toString(); 

if (upgameScore == 10) { 
    msgbox.text = "Congratulations !"; 
    for (var k:Number = 0; k < numClips; k++) { 
     myClip[k].removeEventListener("mouseDown", pieceMove); 
     myClip[k].removeEventListener("mouseUp", pieceMove); 
    } 
    myTimer.reset(); 
    myTimer.stop(); 
    scoreWindow.visible = true; 
    scoreWindowText.visible = true; 
    addChild(scoreWindow); 
    addChild(scoreWindowText); 
    scoreWindowText.text = "Congratulations. You got " + upgameScore + "/10. \nClick FINISHED to go back or TRY AGAIN to restart."; 

} 

} 
} 

следует отметить, что если вы посмотрите ближе к концу кода, где я делаю testHitObject, а затем вызвать RemoveChild после того, чТО частности удалить работы и удаляет объект из кадра.

ответ

0

Решил этот тоже. Я должен, вероятно, потратить немного больше времени, прежде чем опубликовать их.

Как оказалось, когда объекты были сопоставлены, они удалялись в соответствии с выполняемой функцией removeChild(). То, что я делал тогда, повторялось через массив и пыталось удалить некоторые объекты, которые уже были удалены. Итак, что я сделал, был сохранен массив, который соответствовал объектам, и когда они были удалены, изменил флаг на 0. Затем в конце итерации через новый массив, и если есть 1, удалите дочерний объект из массива с тем же индекс. Если есть 0, игнорируйте его. Теперь это работает.