2010-04-21 93 views
5

我遇到的问题是我使用keyboardEventListener使动画片段运行。由于我是一名大学生,我正在创作这个作业,但我们被迫使用as3课程。如何从Adobe Flash中的AS3类访问舞台

当我在maintimeline中运行代码时,没有任何问题。但是,当我尝试从另一个类访问它时(在相关的动画片段中使用'Export for ActionScript'),我得到一个错误,他无法解决舞台问题。

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

回答

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

Alrgiht!我解决了舞台问题。但我仍然遇到一些错误。我发现了错误,他无法找到键盘和每一个错误位于下面样的代码 “如果(evt.keyCode == Keyboard.RIGHT){// 东西 }” 的错误如下: “1120:访问未定义的属性键盘”。 已经为解决舞台事情感谢!搜索谷歌为它,但找不到任何相关的! – Graphithy 2010-04-22 09:27:55

+0

@Graphithy如果您有其他问题,请在stackoverflow上提出一个新问题,而不是在评论中提问。 – davr 2010-04-22 23:29:16

0

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

应该是这个样子。 :

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

建议: 有更深入地了解进口 尝试使用Flash Builder,其多为初学者和汽车进口类,这样你们不需要记忆everythi更好NG。

0

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

这种情况通常发生在当您尝试在舞台上添加舞台之前访问舞台上的任何东西时。我有一段时间,在我的所有项目主类的构造函数中使用init(),但由于这个问题,我不再这样做。现在,而是我与这个替代它(其中主要是类的构造函数/名):

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

我希望这可以帮助其他人谁读过我的Flash做的书,能够提供在init()理念。

And..thanks格雷格W.

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