Не удается удалить ребенка со сцены - if (stade.contains (child1)) {removeChild (Child1);} не работает

StackOverflow https://stackoverflow.com/questions/9316758

  •  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); 
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top