0

クラスコードが添付されたmc_menuというライブラリオブジェクトがあります。クラスはステージ上でメニューを作成し、MC をステージ上に配置します (メニューをクリックして MC を置き換えます)。ステージ上の親クラスから配置されたオブジェクトを呼び出そうとしていますが、正しい方法がわかりません。

これはコードの重要な部分であるため、メイン コードは main. にあります。

public class main extends MovieClip {
        public function main() {


            //add container layers
            addChild(bottomLayer);
            addChild(topLayer);


            topLayer.addChild(menuInst);
            menuInst.init();

}

     public var menuInst= new mc_Menu;            
    public var topLayer:Sprite = new Sprite();
    public var bottomLayer:Sprite = new Sprite();

ご覧のとおり、後で使用するために、メイン ステージに 2 層のスプライトを準備します。メニューは (うまくいくように) 一番上のレイヤーに配置し、他のオブジェクトが一番下のレイヤーに配置される限り、アイテム自体の MC を配置する必要があります。

まあ問題はそのようなものです。menuClass に最下層を呼び出すように指示しようとしていますが、それを正しく参照する方法が見つかりませんでした。

これはコード部分です: mcMenu.as

public class mc_Menu extends MovieClip {

        public function mc_Menu() {

        }


public function init():void{    
        bottomLayer.addChild(masterChapter);
}

クラススコープ内では「bottomLayer」がわからないため、この方法では実行できないことはわかっています。どうすれば正しく行うことができますか?

他の要素が後でそれらを使用するため、レイヤ インスタンスをメイン クラスに残す (メニュー クラス内に取り込まない) ことを好みます。(仕方がなければ…)

ありがとうございました!

4

1 に答える 1

0

mc_Menu インスタンスの親を介して bottomLayer を参照できます。これが悪い考えである唯一の理由は、mc_Menu を再利用する予定で、別の親を持つ場合です。プログラミング用語では、クラスは密接に結合されますが、これは手っ取り早い解決策になります。

public function init():void{    
        parent.parent.bottomLayer.addChild(masterChapter);
}

より良いオプションは、「Singleton」パターンまたはある種の依存性注入 MVC または MVVM フレームワーク (ロボットの脚や SpringAS など) を使用することです。または、メイン要素と子要素の両方の外部でインスタンスを宣言し、値/インスタンスを注入することができます。両方に。

編集

これを少し考えた後、次のように作成するときに、bottomLayer のインスタンスを mc_Menu に渡すという別のオプションがあります。

public class mc_Menu extends MovieClip {
    private var _bottomLayerHandle:Sprite;
    public function mc_Menu(bottomLayer:Sprite)
    {
        _bottomLayerHandle = bottomLayer;
    }
    public function init():void{    
        _bottomLayerHandle.addChild(masterChapter);
    }
}

次に、それらを作成するときに、スプライトが最初に作成されるように再配置します。

public var bottomLayer:Sprite = new Sprite();
public var topLayer:Sprite = new Sprite();
public var menuInst= new mc_Menu(bottomLayer);
于 2012-07-31T17:33:18.023 に答える