[英]How to access the stage from an AS3 class in Adobe Flash
我遇到的問題是我使用keyboardEventListener來運行一個movieclip。 由於我是一名大學生,我正在為一項任務創建這個,但我們被迫使用as3課程。
當我在maintimeline中運行代碼時,沒有問題。 但是當我嘗試從另一個類訪問它時(在動畫片段上有一個'Export for ActionScript')我得到一個錯誤,他無法解決這個階段。
this.stage .addEventListener (KeyboardEvent.KEY_DOWN,dostuff);
在你真正把它放在那里之前,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);
}
“1120:訪問未定義的屬性鍵盤。有你的答案。你還沒有定義鍵盤屬性。這意味着你還沒有導入到包中。
應該看起來像這樣:
import flash.display.*;
import flash.events.*;
import flash.ui.*;
建議:深入了解導入。 嘗試使用Flash Builder,它對初學者和自動導入類更好,所以你不需要記住一切。
當你創建類時,你必須從類的內部引用階段,因為它不能全局訪問,你必須將它傳遞給類,這里是一個在類中使用階段事件監聽器的例子。
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);
這個答案已經幫助了我一百萬次,但是我還沒有足夠的積分來彈出它,或者我願意。
當您在添加到舞台之前嘗試訪問舞台上的任何內容時,通常會發生這種情況。 我有一段時間在我所有項目主類的構造函數中使用了init(),但由於這個問題,我不再這樣做了。 現在,我已將其替換為this(其中Main是類構造函數/名稱):
public function Main():void {
this.addEventListener(Event.ADDED_TO_STAGE, init);
super();
}
...
private function init(e:Event):void {
...
我希望這可以幫助其他讀過我在flash上做過的任何書籍的人提供init()的想法。
並且......謝謝Greg W.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.