1

そのため、最近、クラスをメインクラスにインポートすることで、他のクラスからその関数にアクセスできることを学びました。しかし....インポートされたクラスの私の関数の1つは、ステージに表示オブジェクトを追加する必要があります。静的関数に問題なくアクセスしましたが、ステージにオブジェクトを追加できません。addChildを認識していないようです。ディスプレイリスト自体にないからですか?

ここで何が欠けていますか?この問題をどのように解決しますか。私はとても近かったが、これまでのところ!

コードは次のようになります。

package {

import flash.display.Sprite;
import PopHandler;

public class MyMainClass extends Sprite {
    public function MyMainClass():void {
        PopHandler.LaunchPop();
    }
}

}

これは、ステージに何も追加しないインポートされたクラスです。

package {
import flash.display.Sprite;

public class PopHandler extends Sprite {

    public function PopHandler():void {

    }

    public static function LaunchPop() {
        var bp:BreakPop = new BreakPop();
        bp.x = 500;
        bp.y = 347;
        addChild(bp);
    }
}   

}

BreakPopは私のライブラリのアイテムです。

前もって感謝します。

4

2 に答える 2

3

静的メソッドを使用しているため、スプライトのインスタンスではないため、プロパティPopHandlerにアクセスできません。stage静的メソッドとして残したい場合は、基本的にをスキップしてextends Spritepublic class PopHandler {

それはさておき、ここにあなたの問題に対する簡単な解決策があります:DisplayObjectContainer追加したい をBreakPop静的メソッドのパラメーターとして渡さないのはなぜですか?

例:

public static function LaunchPop(target:DisplayObjectContainer) {
    var bp:BreakPop = new BreakPop();
    bp.x = 500;
    bp.y = 347;
    target.addChild(bp);
}

次に、次のように呼び出します(いくつかの例):

PopHandler.LaunchPop(this); // <-- adding to current object
PopHandler.LaunchPop(root as DisplayObjectContainer); // <-- adding to root
PopHandler.LaunchPop(stage); // <-- adding to stage
于 2012-01-31T17:51:57.263 に答える
3

init でステージを割り当てるよりも、メインドキュメントクラスを拡張し、そこに static var を追加します。

public class Main extends MovieClip {

   public static var stage:Stage;

   public function Main ():void {
     Main.stage = stage;
   }
}

その後、アプリ内のどこからでもステージにアクセスできます:

Main.stage.addChild(element)
于 2012-01-31T16:38:41.497 に答える