簡體   English   中英

如何從Adobe Flash中的AS3類訪問舞台

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM