我遇到的问题是我正在使用keyboardEventListener来运行一个movieclip。由于我是一名大学生,我正在为一项任务创建这个,但我们被迫使用as3课程。
当我在maintimeline中运行代码时,没有问题。但是当我尝试从另一个类访问它时(在动画片段中有一个“导出for ActionScript”)我得到一个错误,他无法解决这个阶段。
this.stage .addEventListener(KeyboardEvent.KEY_DOWN,dostuff);
答案 0 :(得分:9)
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);
}
答案 1 :(得分:0)
“1120:访问未定义的属性键盘。 有你的答案。您尚未定义键盘属性。这意味着您尚未导入包。
应该是这样的:
import flash.display.*;
import flash.events.*;
import flash.ui.*;
建议: 深入了解导入。 尝试使用flash builder,它对于初学者和自动导入类更好,所以你不需要记住所有内容。
答案 2 :(得分: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。
答案 3 :(得分: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);
}
}
}
将文件保存为Eventhndl.as,现在您只需添加此类的实例并传递您需要监听其事件的任何对象,以下是如何执行此操作。
import Eventhndl;
var EH:Eventhndl = new Eventhndl(stage);