害怕我可能会过度思考这个问题,也不知道我应该使用哪些关键字来查找更多信息。不用说,我的搜索被证明是徒劳的。我想知道是否有理由在AS3课程中,我想做这样的事情:
var myStageInstance:Stage;
//within an arbitrary class
var myStageInstance:Stage = stage;
myStageInstance.addEventListener(MouseEvent, someFunction);
与我通常会做的事情相反:
//within an arbitrary class
stage.addEventListener(MouseEvent, someFunction);
我现在正在寻求解决没有特别的问题。 我想知道是否有理由使用一种方法而不是另一种方法。
答案 0 :(得分:2)
是的,有理由保留对舞台的参考。一个例子是,如果您要向舞台添加事件侦听器,并且需要确保将来清理它们,或者希望直接控制事件何时进入。这是一个示例:
public class Demo
{
private var _stage:Stage;
public function Demo()
{
super();
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true);
}
public function destroy():void
{
if (_stage)
{
_stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
_stage.removeEventListener(Event.MOUSE_LEAVE, onMouseLeave);
_stage = null;
}
}
private function onAddedToStage(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
_stage = stage;
_stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove, false, 0, true);
_stage.addEventListener(Event.MOUSE_LEAVE, onMouseLeave, false, 0, true);
}
private function onMouseMove(event:MouseEvent):void
{ /* Do something */ }
private function onMouseLeave(event:Event):void
{ /* Do something */ }
}
答案 1 :(得分:2)
以下代码无法正常工作它会被破坏,因为myStageInstance为null,直到您为其分配内容。
var myStageInstance:Stage;
//within an arbitrary class
myStageInstance.addEventListener(MouseEvent, someFunction);
//You need to do
var myStageInstance:Stage = stage;
myStageInstance.addEventListener(MouseEvent, someFunction);
//this is more preferred as it is a lot less code.
stage.addEventListener(MouseEvent, someFunction);
答案 2 :(得分:0)
您的代码不起作用,因为您没有将stageInstance设置为任何内容。
我看不出为什么你会使用除stage
以外的任何东西来引用所提供的舞台实例的原因,因为它实际上是一个非全局单例。