簡體   English   中英

AS3:無法創建 Movieclip 類實例?

[英]AS3: Can't create Movieclip class instance?

我只是在學習如何使用一些非常基本的代碼在 AS3 中使用類,我正在努力弄清楚如何做最簡單的事情。

我已將文檔類設為“Test”類(本質上是我的主類),我試圖用它做的就是將“WhiteBall”類(影片剪輯)的一個實例添加到舞台上。

'WhiteBall' 類應該允許我用鍵盤控制影片剪輯。 我不知道這部分是否有效,因為我不斷收到此錯誤:

類型錯誤:錯誤 #1009:無法訪問空對象引用的屬性或方法。 在 WhiteBall$iinit()[/Users/Owner/Desktop/Animation/Coding/WhiteBall.as:13] 在 Test$iinit()[/Users/Owner/Desktop/Animation/Coding/Test.as:11]

這是“測試”類的代碼:

package {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;



    public class Test extends MovieClip
    {
        var whiteBall:WhiteBall = new WhiteBall ();

        public function Test() {

            addEventListener(Event.ENTER_FRAME, whiteBallSpawn);

        }

        public function whiteBallSpawn(evt:Event) {


            stage.addChild(whiteBall);
            whiteBall.x = 200;
            whiteBall.y = 250;




        }





    }
}

這是“WhiteBall”類的代碼:

package {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    public class WhiteBall extends MovieClip
    {


        public function WhiteBall() {

            stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
        }

        public function keysdown(mykey:KeyboardEvent) {

        if(mykey.keyCode==Keyboard.UP) {
            this.y--;
        }

        if(mykey.keyCode==Keyboard.DOWN) {
            this.y++;
        }

        if(mykey.keyCode==Keyboard.RIGHT) {
            this.x++;
        }

        if(mykey.keyCode==Keyboard.LEFT) {
            this.x--;
        }
    }
    }
}

'Test' 類中的第 11 行錯誤是指這一行:

var whiteBall:WhiteBall = new WhiteBall ();

我不知道這里有什么問題。 您能給我的任何幫助將不勝感激。

Organis 所說的是這樣的:當您創建一個 DisplayObject,例如一個 MovieClip,它是您的 WhiteBall 擴展的類,那么該對象的 stage 屬性為空。 這意味着當您嘗試在其構造函數上訪問白球的 stage 屬性時

public function WhiteBall() 
{
   stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
} 

因為 stage 為空,所以拋出了一個錯誤。 所以要解決這個問題,最安全和最常見的方法是等到球被添加到舞台上,然后監聽任何舞台鍵盤事件。 像這樣:

public function WhiteBall() 
{
    if(stage != null)
    {
        stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
    }
    else
    {
       this.addEventListener(Event.ADDED_TO_STAGE, addedToStage);
    }
}
private function addedToStage(e:Event):void
{
   this.removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
   stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
}

因此,當您的 Test 類實例將球添加到舞台時,您的 WhiteBall 實例的 stage 屬性將具有一個值,因此可以安全地偵聽任何鍵盤事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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