полностью удалить или уничтожить ребенка

100
12

У меня есть ребенок с именем "viseur", который появляется на определенной сцене и заменяет мой фактический курсор.

Когда вызывается событие "removeViseur", я хотел бы полностью удалить дочерний "viseur" (и я буду использовать свой предыдущий курсор).

Я это сделал:

stage.addEventListener("functionCalled", removeViseur, false, 0, true);

public function removeViseur(e:Event):void{
trace("removeViseur");
viseur.visible = false;
viseur.parent.removeChild(viseur);
viseur = null;
}

"Визеров" ребенка больше нет, но если вы делаете Alt + tab или меняете окно и возвращаетесь, ребенок "viseur" возвращается...

Вы знаете, как я могу полностью его уничтожить? (Мне не нужно это после вызова этой функции)

Спасибо,

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

Вот мой код.

public static var viseur:Viseur;

var lookCocoDessous:Boolean = thisBack == "cocotierDessous";
if (lookCocoDessous) {
viseur = new Viseur(stage);
stage.addChild(viseur);
viseur.visible = true;
stage.addEventListener("functionCalled", removeViseur, false, 0, true);

public function removeViseur(e:Event):void{
trace("removeViseur");
viseur.visible = false;
viseur.parent.removeChild(viseur);
viseur = null;
}

И у "viseur" есть собственный класс

viseur.as:

public class Viseur extends MovieClip
{
private var engine:Engine;
private var stageRef:Stage;
private var p:Point = new Point();

public function Viseur(stageRef:Stage)
{

Mouse.hide(); //make the mouse disappear
mouseEnabled = false; //don't let our cursor block anything
mouseChildren = false;

this.stageRef = stageRef;
x = stageRef.mouseX;
y = stageRef.mouseY;

stageRef.addEventListener(MouseEvent.MOUSE_MOVE, updateMouse, false, 0, true);
stageRef.addEventListener(Event.MOUSE_LEAVE, mouseLeaveHandler, false, 0, true);
stageRef.addEventListener(Event.ADDED, updateStack, false, 0, true);

}

private function updateStack(e:Event) : void
{
stageRef.addChild(this);
}

private function mouseLeaveHandler(e:Event) : void
{
visible = false;
Mouse.show(); //in case of right click
stageRef.addEventListener(MouseEvent.MOUSE_MOVE, mouseReturnHandler, false, 0, true);
}

private function mouseReturnHandler(e:Event) : void
{
visible = true;
Mouse.hide(); //in case of right click
removeEventListener(MouseEvent.MOUSE_MOVE, mouseReturnHandler);
}

private function updateMouse(e:MouseEvent) : void
{
x = stageRef.mouseX;
y = stageRef.mouseY;

e.updateAfterEvent();
}

}

}
}

спросил(а) 2021-01-25T12:11:01+03:00 5 месяцев назад
1
Решение
89

Viseur добавляет себя на сцену, когда срабатывает Event.ADDED. Это срабатывает всякий раз, когда что-либо добавляется на сцену (не только Viseur). Вы также сделали Viseur статическим свойством, гарантируя, что он не исчезнет из памяти.

Чтобы быть кратким: добавьте Viseur только один раз и вне себя (тем самым устраняя необходимость передать ссылку на сцену). Имейте в виду, что после того, как DisplayObject является родителем, он автоматически получает свойства stage & root которые вы можете ссылаться на mouseX и mouseY.

Тем не менее, если вы пытаетесь заменить курсор мыши, я настоятельно рекомендую использовать другой такт: коренные курсоры.

См. Http://inflagrantedelicto.memoryspiral.com/2012/07/as3-quickie-native-mouse-cursors/

ответил(а) 2021-01-25T12:11:01+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема