Не удается удалить ребенка со сцены - if (stade.contains (child1)) {removeChild (Child1);} не работает
-
26-10-2019 - |
Вопрос
Это может звучать глупо, но как я могу удалить определенного ребенка со сцены? например
function giveMeResult(e:MouseEvent):void
{
if(stage.contains(result))
{removeChild(result);}
addChild(result); // this part works fine, but it adds one over another
}
Это добавляет один результат в верхней части предыдущего.
Я хочу, чтобы функция «Givemeresult: удалить« результат », если находится на сцене, и добавил новый.
ОБНОВИТЬ:*Результатом является текстовое поле, и result.txt = "" время от времени меняется ...
trace (result.parent); /// gives [object Stage]
trace (result.stage); /// gives[object Stage]
trace (result.parent != null && result.parent == result.stage); // gives true
когда
result.parent.removeChild(result);
написан без оператора if - дает ошибку TypeError: Ошибка № 1009: Невозможно получить доступ к свойству или методу ссылки на нулевой объект.
Когда написано внутри:
if (result.parent !=null && result.parent == result.stage)
{
result.parent.removeChild(result);
}
Ничего не происходит, и новый ребенок добавляется в верхней части предыдущего.
Спасибо всем!!! Результат прост :) Все, что мне нужно было сделать, это просто изменить result.txt, даже не удаляя его со сцены :)
Решение 5
Все, что мне нужно было сделать, это просто изменить result.txt, даже не удаляя его со сцены
Другие советы
Вам нужно печатать stage.removeChild(result);
и впоследствии stage.addChild(result);
Редактировать:
Глядя на функцию, похожую на вашу:
private function func(e:Event) : void {
if(stage.contains(result)) {
stage.removeChild(result);
}
stage.addChild(result);
}
Единственный способ, которым это добавит новый экземпляр текстового поля result
На сцене, без удаления старого, был бы, если результат изменился. Смотрите этот поток исполнения:
var result : TextField = new TextField();
// An event occurs and func get's called.
// now result will be added to stage.
result = new TextField();
// An event occurs and func get's called again
// This time the stage.contains(..) will return false, since the current result
// is not actually on stage. This will add a second TextField to the stage.
Если меня четко поняли, что вы хотите, то этот код может вам помочь:
if (result.parent != null && result.parent == result.stage)
{
// stage itself contains result
result.parent.removeChild(result);
}
От документов DisplayObjectContainer.Contains (): «Внуки, правнуки и т. Д. На каждом возвращении правда».
Таким образом, содержит средства в любом месте в списке дисплея, а не только прямое дети. Вы хотите, чтобы родитель проверял Manque, или просто для удаления результатов, где бы он ни был:
if (result.parent) {result.parent.removeChild(result); }
Хотя, как ни странно, AddChild (результат) автоматически удалит его из предыдущего родителя - DisplayObject может находиться только в одном месте в списке отображения за раз, поэтому я не уверен, почему вы видите несколько результатов ...
Возможно ли, что «результат», который вы прошли, не является результатом, который уже находится на сцене?
Ты пытался?
MovieClip(root).removeChild(result)
РЕДАКТИРОВАТЬ
function giveMeResult(e:MouseEvent):void{
if(result.parent != null && result.parent == result.stage){
stage.removeChild(result);
}
stage.addChild(result);
}