繁体   English   中英

如何从Adobe Flash中的AS3类访问舞台

[英]How to access the stage from an AS3 class in Adobe Flash

我遇到的问题是我使用keyboardEventListener来运行一个movieclip。 由于我是一名大学生,我正在为一项任务创建这个,但我们被迫使用as3课程。

当我在maintimeline中运行代码时,没有问题。 但是当我尝试从另一个类访问它时(在动画片段上有一个'Export for ActionScript')我得到一个错误,他无法解决这个阶段。

this.stage .addEventListener (KeyboardEvent.KEY_DOWN,dostuff);

在你真正把它放在那里之前,AS3中的一个类不在舞台上。 因此,“this.stage”在编译时将为null。 您可以通过使用ADDED_TO_STAGE事件来延迟绑定侦听器,直到时机成熟,从而解决此问题。

public function MyClass(){
    this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
}

private function addedToStageHandler(e:Event):void{
    this.stage.addEventListener(KeyboardEvent.KEY_DOWN, dostuff);
}

“1120:访问未定义的属性键盘。有你的答案。你还没有定义键盘属性。这意味着你还没有导入到包中。

应该看起来像这样:

 import flash.display.*;
 import flash.events.*;
 import flash.ui.*; 

建议:深入了解导入。 尝试使用Flash Builder,它对初学者和自动导入类更好,所以你不需要记住一切。

当你创建类时,你必须从类的内部引用阶段,因为它不能全局访问,你必须将它传递给类,这里是一个在类中使用阶段事件监听器的例子。

package  {
    import flash.events.KeyboardEvent;

    public class Eventhndl{

        private var obj:Object; //create local variable to refarance stage


        public function Eventhndl(objStage:Object):void{
            obj = objStage; //make local refarance for stage inside the class

            obj.addEventListener(KeyboardEvent.KEY_DOWN,runit); //add the event listener
        }

        private function runit(Event:KeyboardEvent):void{
            trace("keyDownHandler: " + Event.keyCode);
            trace("ctrlKey: " + Event.ctrlKey);
            trace("keyLocation: " + Event.keyLocation);
            trace("shiftKey: " + Event.shiftKey);
            trace("altKey: " + Event.altKey);
        }
    }

}

将文件保存为Eventhndl.as,现在您只需添加此类的实例并传递您需要监听其事件的任何对象,以下是如何执行此操作。

import Eventhndl;

var EH:Eventhndl = new Eventhndl(stage); 

这个答案已经帮助了我一百万次,但是我还没有足够的积分来弹出它,或者我愿意。

当您在添加到舞台之前尝试访问舞台上的任何内容时,通常会发生这种情况。 我有一段时间在我所有项目主类的构造函数中使用了init(),但由于这个问题,我不再这样做了。 现在,我已将其替换为this(其中Main是类构造函数/名称):

public function Main():void {
    this.addEventListener(Event.ADDED_TO_STAGE, init);
    super();    
}
...
private function init(e:Event):void {
...

我希望这可以帮助其他读过我在flash上​​做过的任何书籍的人提供init()的想法。

并且......谢谢Greg W.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM