5

我遇到的问题是我正在使用keyboardEventListener 来制作一个movieclip。由于我是一名大学生,我正在为一项作业创建这个,但我们被迫使用 as3 类。

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

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

4

4 回答 4

9

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);
}
于 2010-04-21T21:00:19.897 回答
0

这个答案帮助了我一百万次,但我还没有足够的分数来弹出它,或者我会的。

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

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

我希望这对阅读我在 Flash 上做过的任何书籍的其他人有所帮助,这些书籍提供了 init() 的想法。

还有..感谢 Greg W.

于 2011-04-27T18:57:19.623 回答
0

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

应该是这样的:

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

建议:更深入地了解导入。尝试使用 flash builder,它更适合初学者和自动导入课程,因此您无需记住所有内容。

于 2010-04-25T02:32:21.043 回答
0

创建类时,您必须从类内部引用舞台,因为它无法全局访问,您必须将其传递给类,这是在类中使用舞台事件侦听器的示例。

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

}

将文件保存为 Eventthndl.as,现在您可以添加此类的实例并传递您需要监听其事件的任何对象,这里是如何做到这一点。

import Eventhndl;

var EH:Eventhndl = new Eventhndl(stage); 
于 2016-11-19T10:42:06.517 回答