2010-04-21 91 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);