如何从Adobe Flash中的AS3类访问stage

如何从Adobe Flash中的AS3类访问stage,flash,actionscript-3,class,keyboard,stage,Flash,Actionscript 3,Class,Keyboard,Stage,我遇到的问题是,我正在使用keyboardEventListener制作movieclip。因为我是一名大学生,所以我写这篇文章是为了完成一项作业,但我们不得不使用as3课程 当我在maintimeline中运行代码时,没有问题。但当我试图从另一个类访问它时(有问题的movieclip上有一个'Export for ActionScript',我得到一个错误,他无法解决这个问题 此.stage.addEventListener(KeyboardEvent.KEY\u DOWN,dostuff)

我遇到的问题是,我正在使用keyboardEventListener制作movieclip。因为我是一名大学生,所以我写这篇文章是为了完成一项作业,但我们不得不使用as3课程

当我在maintimeline中运行代码时,没有问题。但当我试图从另一个类访问它时(有问题的movieclip上有一个'Export for ActionScript',我得到一个错误,他无法解决这个问题


此.stage.addEventListener(KeyboardEvent.KEY\u DOWN,dostuff)

AS3中的一个类只有在您实际将其放在舞台上时才会出现。因此,“this.stage”在编译时将为空。您可以通过使用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,这对初学者和自动导入类来说更好,所以你不需要记住所有内容。

这个答案帮了我一百万次,但我还没有足够的分数来弹出一个,否则我会的

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

我希望这能帮助其他读过我在flash上写的任何一本书的人,这些书提供了init()思想


还有..谢谢Greg W.

当您创建类时,您必须从类内部引用stage,因为它不可全局访问,您必须将其传递到类中,下面是一个在类内部使用stage事件侦听器的示例

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); 

Alrghit!我已经解决了stage问题。不过我仍然有一些错误。我得到的错误是,他找不到键盘,每个错误都位于以下类型的代码“if(evt.keyCode==keyboard.RIGHT){//stuff}”错误如下:“1120:访问未定义的属性键盘。“已经感谢你解决了舞台问题!在谷歌搜索,但找不到任何相关信息@如果你有不同的问题,在stackoverflow上问一个新问题,而不是在评论中问。
import Eventhndl;

var EH:Eventhndl = new Eventhndl(stage);