actionscript-3 - AS3 获取舞台上某个类的所有实例的数组?

标签 actionscript-3 function instances

假设我已经定义了 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]数组?

最佳答案

很简单,看看我做的以下内容:

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

这里的三个关键函数是 getCircles()、getSquares() 和 getChildren()。它们本质上都做同样的事情,函数中有一个 for 循环,循环遍历指定的显示对象容器的子级。每次交互时,它都会检查 getCircles()getSquares() 中的 CircleSquare 类型分别函数,然后将每个显示对象添加到函数返回的本地数组中。

getChildren() 函数允许预先指定类型,从而更进一步。

关于actionscript-3 - AS3 获取舞台上某个类的所有实例的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6089765/

相关文章:

flash - Flash AS3错误堆栈路径

ios - 如何在 AS3 中使用 iOS 相机?

python - 从 Python 中的字典中提取彼此不相等的随机键

java - App Engine - 打开的实例太多

java - 实例可以稍后完成其参数吗?

Java ServerSocket 多个监听实例

flash - 如何使用 URLRequest 发送自定义 header

在 cs6 中使用 AIRSDK 3.7 发布的 IOS 应用程序显示空白屏幕

python - 为什么我的插值在我的函数中不能正常工作?

c++ - 从并行数组返回值并在后面的函数中使用这些值