我有一个名叫" 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;
}
孩子" viseur"已经不在了,但如果做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();
}
}
}
}
答案 0 :(得分:0)
Viseur
触发, Event.ADDED
就会将自己添加到舞台上。只要向舞台添加任何内容(不仅仅是Viseur
),它就会触发。您还使Viseur
成为静态属性,从而确保它不会从内存中消失。
简洁:只添加Viseur
一次,并从外部添加(因此无需传递阶段参考)。请注意,一旦DisplayObject成为父级,它就会自动获得stage
&您可以为mouseX和mouseY引用的root
属性。
那就是说,如果你试图更换鼠标光标,我强烈建议采用不同的方法:原生游标。
请参阅http://inflagrantedelicto.memoryspiral.com/2012/07/as3-quickie-native-mouse-cursors/