ActionScript 3 удалить дочерний элемент в точке

привет, я новичок в AS3, и мне было интересно, как лучше всего удалить ребенка в какой-то момент. Я пытался

Holder.removeChild(Holder.getObjectsUnderPoint(new Point(exampleX, exampleY))[0]);

однако это вернуло ArgumentError: Ошибка № 2025: предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.

какие-либо предложения?


person Dain    schedule 14.12.2010    source источник


Ответы (2)


Метод getObjectsUnderPoint() вернет массив DisplayObjects, которые не обязательно могут быть прямыми дочерними элементами вашего объекта Holder, они могут быть внуками или внуками и т. д.

Вы можете установить условное выражение следующим образом:

var objects:Array =  Holder.getObjectsUnderPoint( yourPoint );
for each( var child:DisplayObject in objects )
{
    if( child.parent == Holder )
       Holder.removeChild( child ) ;
}

Holder.contains ничего не фильтрует, так как возвращает и grandChildren... Моя ошибка!

person PatrickS    schedule 14.12.2010
comment
ок попробовал. он проходит через Holder.contains(), но затем все равно выдает ту же ошибку, когда пытается его удалить. странно да - person Dain; 14.12.2010
comment
только что понял, что мне не хватает скобки :( вы пробовали код как таковой или вы его изменили? - person PatrickS; 14.12.2010
comment
да, я взял это и добавил это. я решил проверить родителя объектов в массиве объектов, и он дал мне тип объекта вместо держателя: S. во всяком случае, я закончил тем, что использовал уродливое кодовое решение Маттиаса - person Dain; 14.12.2010
comment
Иногда приятно побыть уродливым парнем. Было бы неплохо узнать, почему Holder.contains(child) работает, но не Holder.removeChild(child). - person Mattias; 14.12.2010
comment
мне действительно удалось заставить ваше решение работать, за исключением только if(child.parent.parent == Holder) {holder.removeChild(child.parent);} я думаю, это было, как вы выразились, внук: P... не уверен, как это произошло. в любом случае спасибо за помощь! - person Dain; 14.12.2010

Я не знаю, почему версия Патрика не работает. Вот альтернативное решение (уродливый код), использующее родителя клипа.

var clips : Array =  _container.getObjectsUnderPoint(_point);

for each(var clip : DisplayObject in clips)
{
    clip.parent.removeChild(clip);
}
person Mattias    schedule 14.12.2010