Как удалить дочерний элемент без ошибки Дочерний элемент должен быть ненулевым

У меня есть проблема, которую я не могу понять.

У меня в классе двигателей (engine.as) это:

public static var viseur:Viseur;

var lookCocoDessous:Boolean = thisBack == "cocotierDessous";
if (lookCocoDessous) {
     viseur = new Viseur(stage);
    stage.addChild(viseur);
    viseur.visible = true;
    souris.visible = false;
    puzzle.addListeners();

}

И в моем классе головоломок (Puzzle.as) это:

public static var viseur:Viseur;

и когда вызывается функция «backToJardin», я хочу удалить «viseur» (который был вызван в Engine.as). Итак, я написал это:

public function backToJardin(thisBack:String):void{

    Engine.viseur.stage.removeChild(viseur);
        Engine.newBack = "jardin";
    stageRef.dispatchEvent(new Event("changeBackground"));

    }

Но у меня есть эта ошибка:

TypeError: Ошибка № 2007: дочерний параметр не должен быть нулевым. в flash.display::DisplayObjectContainer/removeChild() в com.laserdragonuniversity.alpaca::Puzzle/backToJardin()

Ты знаешь почему ? И как я могу решить это?

Я хотел бы ПОЛНОСТЬЮ удалить «viseur», когда функция вызывается в моем Puzzle.as (она больше никогда не будет вызываться, поэтому я хочу «уничтожить» ее)

Спасибо за помощь,


РЕДАКТИРОВАТЬ

я пытался поставить

Engine.removeViseur();

в моей функции backToJardin

и положи

public function removeViseur(){ stage.removeChild(viseur);}

в моем классе Engine, но у меня есть эта ошибка: ошибка 1061 removeViseur не может быть определена через ссылку со статическим типом

(и то же самое для моего класса Engine.as):

public function removeViseur(){
            if (Engine.viseur && Engine.viseur.parent)
 {
       Engine.viseur.parent.removeChild(viseur);
        }
    }

person user2421975    schedule 26.01.2014    source источник


Ответы (1)


Если вы хотите удалить viseur в Engine, попробуйте это

  if (Engine.viseur && Engine.viseur.parent)
 {
       Engine.viseur.parent.removeChild(viseur);
  }

Или поместите этот код в функцию в Engine и вызовите функцию в backToJardin.

ИЗМЕНИТЬ

Функция в движке должна быть статической.

public static function removeViseur()
{

    if (viseur && viseur.parent)
    {
        viseur.parent.removeChild(viseur);
    }
 }
person Pan    schedule 26.01.2014
comment
Та же ошибка: Ошибка № 2007: Дочерний параметр должен быть ненулевым... Любая идея, почему? - person user2421975; 26.01.2014
comment
Я пытаюсь поставить Engine.removeViseur(); в моей функции backToJardin и поместите публичную функцию removeViseur () { stage.removeChild (viseur);} в мой класс Engine, но у меня есть эта ошибка: ошибка 1061 removeViseur не может быть определена через ссылку со статическим типом. - person user2421975; 26.01.2014
comment
То же самое, конечно, для публичной функции removeViseur(){ if (Engine.viseur && Engine.viseur.parent) { Engine.viseur.parent.removeChild(viseur); } } - person user2421975; 26.01.2014
comment
Не могу найти решение. искал уже несколько часов ... Кто-нибудь может мне помочь? - person user2421975; 27.01.2014
comment
Спасибо. Поначалу кажется, что работать как дочерний визер больше не видно. Но если я перетащу мышь на текст или если я перетащу его за пределы экрана и вернусь обратно, дочерний визуал снова здесь! Неужели нет никакого способа уничтожить его полностью? (вот небольшое видео: ul.to/asdj7931 (1,3 Мб) - person user2421975; 27.01.2014
comment
Если вы уверены, что была вызвана функция removeViseur, и viseur был удален, а viseur появляется снова, попробуйте установить точку останова в коде, где viseur создается и добавляется на сцену. Или где-нибудь еще вы можете добавить viseur на сцену. - person Pan; 27.01.2014