1

こんにちは、ムービークリップの x インスタンスを作成するカスタム クラスを作成しました。しかし、以下は機能しません。

package {

import flash.display.MovieClip;
public class CustomClass extends MovieClip {

    public function CustomClass(amount:uint) {  
        var Collector:Array = new Array(); 

        //Add and position Tiles to stage.
        for (var i:uint = 1; i <= amount; i++){ 
            var newMovieClip:MovieClip = new MovieClip;
            newMovieClip.y = amount * 10;
            Collector.push(newMovieClip); 
        }
        addChild(Collector);
    }
}

}

それらをタイムラインに配置したい

var customClass_mc:CustomClass = new CustomClass(10);
addChild(customClass_mc);

//インスタンスの 1 つの x 位置をトレースしようとします。
trace(customClass_mc.Collector[5].x);

次のエラーが発生し続けます: Scene 1, Layer 'Layer 1', Frame 1, Line 5 1119: 静的型 CustomClass の参照を介した未定義の可能性のあるプロパティ Collector へのアクセス。

4

3 に答える 3

2

まず、Collector をパブリックとして宣言する必要があります。

public var Collector:Array = new Array(); 

Collector は表示オブジェクトではなく配列であるため、表示ツリーに追加できません。代わりに、各 newMovieClip を Custom クラスのディスプレイにプッシュし、for ループ内に配置します。次に、次を使用してムービークリップをターゲットにできるため、コレクターはまったく必要ありませんgetChildAt()

trace(customClass_mc.getChildAt(5).x);
于 2011-04-18T12:19:43.420 に答える
1

私はさらに良いと思う別の答えを自分で見つけました!

コンテナはまったく必要ありません。

以下を使用する場合

package {

    import flash.display.MovieClip;
    public class CustomClass extends MovieClip {

        public function CustomClass(amount:uint) {  

            //Add and position Tiles to stage.
            for (var i:uint = 1; i <= amount; i++){ 
                var newMovieClip:MovieClip = new MovieClip;
                newMovieClip.y = amount * 10;
                newMovieClip.name = "clip"+i;
                addChild(newMovieClip); 
            }
        }
    }
}

いいえ、次を使用してムービークリップにアクセスできます。

var customClass_mc:CustomClass = new CustomClass(10);
addChild(customClass_mc);

//try to trace the x position of the fifth instance. 
trace(customClass_mc.getChildByName("child5").y);
于 2011-06-21T09:32:00.610 に答える
0

変数「コレクター」は、コンストラクター内でのみ使用できます。タイムラインの外からアクセスできるようにするには、コレクターを公開する必要があります。最善の方法は、これにアクセスするパブリック getter メソッドを作成することです。次のようなものです:

import flash.display.MovieClip;
public class CustomClass extends MovieClip {

    private var Collector:Array = new Array(); 

    public function get Collector():Array
    {
        return Collector;
    }

    public function CustomClass(amount:uint) {  

        //Add and position Tiles to stage.
        for (var i:uint = 1; i <= amount; i++){ 
            var newMovieClip:MovieClip = new MovieClip;
            newMovieClip.y = amount * 10;
            Collector.push(newMovieClip); 
        }
        addChild(Collector);
    }
}
于 2011-04-18T12:22:12.737 に答える