AS3 удалить MC из ссылки на динамический путь с помощью removeChild - PullRequest
0 голосов
/ 31 октября 2010

Я даже не уверен, отражает ли заголовок то, что я хочу сделать. Вот предыстория. У меня есть мувиклип с 5 клипами «Держатель». Это мои контейнеры для динамически добавляемых видеоклипов.

У родительских контейнеров есть имя экземпляра пирамиды, имена экземпляров держателя помечены после 6 групп продуктов, т. Е. «Держатель зерна», «фруктодержатель», «держатель овощей» и т. Д. И т. Д.

Держатели находятся в контейнере пирамиды, имена экземпляров как выше, и контейнер пирамиды добавляется в список отображения. У меня есть функция addFoodToPyramid (), которая добавляет mc 'foodMC' к соответствующим держателям. Таким образом, [объект Apple] будет динамически добавляться с помощью pyramid.fruitholder.addChild (Apple). Функция также добавляет слушателя. Вот вызов и функция:

Вызов (в качестве примера я буду использовать зерна):

addFoodToPyramid(grainArray, grainHolder, grainCounter);

И функция:

функция addFoodToPyramid (thisArray: Array, thisHolder: MovieClip, thisCounter: Number): void {

   thisCounter = 0;

   for (var f:Number=0; f<thisArray.length; f++)
   {

    trace(thisArray.length);
    foodMC = (thisArray[f] as MovieClip);
    trace(foodMC);
    thisHolder.addChild(foodMC);
    foodMC.addEventListener(MouseEvent.MOUSE_DOWN, startFoodDrag, false, 0, true);
    thisMC.scaleX = thisMC.scaleY = .7;
    thisMC.x = 60 * thisCounter;
    thisCounter++;

   }

  }

Тогда у меня есть функция startDrag:

function startFoodDrag(e:MouseEvent):void

{ foodDrag = e.target as MovieClip; foodDrag.startDrag (); foodPoint = новая точка (foodDrag.x, foodDrag.y); stage.addEventListener (MouseEvent.MOUSE_UP, stopFoodDrag, false, 0, true); }

Тогда функция отбрасывания И ПРОБЛЕМА ЗДЕСЬ ЗДЕСЬ:

foodDrag = foodDrop;
stage.addEventListener(MouseEvent.MOUSE_UP, stopFoodDrag);
if(foodDrag.dropTarget.parent==myPlate){

// ЗДЕСЬ ПРОБЛЕМА RemoveChild (foodDrag); // очевидно возвращает ошибку, потому что ссылка foodDrag неверна

}

Хорошо, так что очевидно, что ссылка - это не прямой removeChild (), а конкретный путь. Как:

pyramid.*THE-HOLDER-OF-foodDRAG*.removeChild(foodDrag). 

Но я просто не могу понять, как это сделать. Я пробовал:

var mcParent:MovieClip=(foodDroppedMC.parent);
pyramid.mcParent.removeChild(foodDroppedMC);

// возвращает ошибку 1118 Неявное принуждение

Я пробовал:

var mcParent:String=(foodDroppedMC.parent.name);
pyramid.getChildByName(mcParent).removeChild(foodDroppedMC);

// возвращаем 1061 Вызов возможно неопределенного метода removeChild со ссылкой на статический тип и т. Д. И т. Д.

Тот факт, что это такая банальная проблема, делает ее такой расстраивающей ...

Любая помощь будет принята с благодарностью. Спасибо

Ответы [ 2 ]

0 голосов
/ 31 октября 2010

Попробовал это, И ЭТО РАБОТАЕТ !!!:

var mcParent:String=(foodDroppedMC.parent.name);
pyramid[mcParent].removeChild(foodDroppedMC);

Если кто-нибудь может дать некоторое представление о том, как это работает, я бы хотел знать. Я предполагаю, что mcParent с типом «String» делает строку (foodDroppedMC.parent.name) строкой, а скобки [] в пути mc каким-то образом приводят его в качестве MC, поэтому неявное принуждение отсутствует. Это мое предположение ... лол.

Во всяком случае, счастливых дней. Не стесняйтесь расширять это решение. Я не совсем уверен, что в Университете Google (где я получил свой Flash as3 степени = P) много говорится о том, что [] используется иначе, чем с массивами.

0 голосов
/ 31 октября 2010

У меня возникли некоторые проблемы с подробностями вашего вопроса (я думаю, что, возможно, какая-то «функция отбрасывания» как-то потерялась в вашем посте).

Но если вопрос таков: как удалить фрагмент ролика из его родителя, не зная точного пути к родителю? тогда ответ прост:

foodDrag.parent.removeChild(foodDrag);

при условии, что foodDrag - это ваш видеоклип, который вы хотите удалить.

Если я не понял, пожалуйста, ответьте и помогите мне понять, о чем вы спрашиваете.

...