2

myCircle クラスがすべて定義されていると仮定します。私のコードが次のようになっている場合:

var circle1:myCircle = new myCircle()
var circle2:myCircle = new myCircle()
var circle3:myCircle = new myCircle()
var circle4:myCircle = new myCircle()

stage.addChild(circle1)
stage.addChild(circle2)
stage.addChild(circle3)
stage.addChild(circle4)

[circle1, circle 2, circle3, circle4] の配列を自動的に返す関数を作成するにはどうすればよいですか?

4

2 に答える 2

4

それは簡単です、私が作った以下を見てください:

package 
{
    import flash.display.DisplayObject;
    import flash.display.DisplayObjectContainer;
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite 
    {
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);

        }// end function

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            for (var i:uint = 0; i < 5; i++)
            {
                var circle:Circle = new Circle();
                circle.name = "circle" + (i+1);
                stage.addChild(circle);

            }// end for

            for (var j:uint = 0; j < 5; j++)
            {
                var square:Square = new Square();
                square.name = "square" + (j+1);
                stage.addChild(square);

            }// end for

            traceNames(getCircles(stage)); // output: circle1
                                           //         circle2
                                           //         circle3
                                           //         circle4
                                           //         circle5

            traceNames(getSquares(stage)); // output: square1
                                           //         square2
                                           //         square3
                                           //         square4
                                           //         square5


            traceNames(getChildren(stage, Circle)); // output: circle1
                                                    //         circle2
                                                    //         circle3
                                                    //         circle4
                                                    //         circle5

        }// end function

        private function getCircles(container:DisplayObjectContainer):Array
        {
            var array:Array = new Array();

            for (var i:uint = 0; i < container.numChildren; i++)
            if (container.getChildAt(i) is Circle)
            array.push(container.getChildAt(i));

            return array;

        }// end function

        private function getSquares(container:DisplayObjectContainer):Array
        {
            var array:Array = new Array();

            for (var i:uint = 0; i < container.numChildren; i++)
            if (container.getChildAt(i) is Square)
            array.push(container.getChildAt(i));

            return array;

        }// end function

        private function getChildren(container:DisplayObjectContainer, type:Class):Array
        {
            var array:Array = new Array();

            for (var i:uint = 0; i < container.numChildren; i++)
            if (container.getChildAt(i) is type)
            array.push(container.getChildAt(i));

            return array;

        }// end function

        private function traceNames(array:Array):void
        {
            for each(var displayObject:DisplayObject in array)
            trace(displayObject.name);

        }// end function

    }// end class

}// end package

import flash.display.Sprite;

internal class Circle extends Sprite
{
    public function Circle() {}

}// end class

internal class Square extends Sprite
{
    public function Square() {}

}// end class

ここで重要な 3 つの関数は、getCircles()、getSquares()、および getChildren() です。それらはすべて基本的に同じことを行いforます。関数には、指定された表示オブジェクト コンテナーの子をループするループがあります。反復のたびに、関数と関数のいずれかCircleまたはSquare型の型をそれぞれチェックし、関数によって返されるローカル配列に各表示オブジェクトを追加します。getCircles()getSquares()

このgetChildren()関数は、タイプを事前に指定できるようにすることで、さらに一歩進んでいます。

于 2011-05-22T19:33:11.917 に答える
2

私はあなたの代わりにあなたの仕事をするつもりはありませんが、私はあなたにヒントを与えることができます:

次のようにして、何かが myCircle インスタンスであるかどうかを確認できます

if(child is myCircle)

そのため、ステージのすべての子をループすると、myCircle のインスタンスである子を配列に入れることができ、そうでない場合は何もしません。これにより、myCircles であるすべての子の配列が得られます。

于 2011-05-22T19:04:30.233 に答える