5

私が遭遇した問題は、keyboardEventListenerを使用してムービークリップを実行していることです。私は大学生なので、これを課題用に作成していますが、as3クラスを使用せざるを得ません。

メインタイムラインでコードを実行すると、問題はありません。しかし、別のクラスからアクセスしようとすると(問題のムービークリップの「ActionScriptにエクスポート」を使用して)、ステージに対処できないというエラーが表示されます。

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

4

4 に答える 4

9

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);
}
于 2010-04-21T21:00:19.897 に答える
0

この答えは私を何百万回も助けてくれましたが、私はまだそれをポップアップするのに十分なポイントを持っていません、または私はそうします。

これは、ステージに追加される前にステージ上の何かにアクセスしようとすると、一般的に発生します。私はしばらくの間、すべてのプロジェクトのメインクラスのコンストラクターでinit()を使用していましたが、この問題のため、使用しなくなりました。代わりに、これを次のように置き換えました(Mainはクラスコンストラクター/名前です)。

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

これが、私がフラッシュで書いた、init()のアイデアを提供する本を読んだ他の人の助けになることを願っています。

そして..GregWに感謝します。

于 2011-04-27T18:57:19.623 に答える
0

"1120:未定義のプロパティKeyboardへのアクセス。答えがあります。キーボードのプロパティを定義していません。つまり、パッケージにインポートしていません。

次のようになります。

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

アドバイス:インポートについて詳しく調べてください。Flash Builderを使用してみてください。初心者や自動インポートクラスに適しているため、すべてを覚える必要はありません。

于 2010-04-25T02:32:21.043 に答える
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); 
于 2016-11-19T10:42:06.517 に答える