假设我已经定义了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]数组?
答案 0 :(得分: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
这里的三个关键功能是getCircles(),getSquares()和getChildren()。它们基本上都做同样的事情,函数中的for
循环遍历指定的显示对象容器的子节点。在每次交互时,它分别检查Circle
和Square
函数中getCircles()
或getSquares()
类型的类型,然后将每个显示对象添加到本地数组由函数返回。
getChildren()
函数允许事先指定类型,从而更进一步。
答案 1 :(得分:2)
我不打算为你做你的工作,但我可以给你一个提示:
你可以通过
检查某些东西是否是myCircle实例if(child is myCircle)
所以当你循环遍历舞台的所有孩子时,你可以把那些ARE实例myCircle的子节点放入数组中,如果没有,就什么也不做。这会给你一个包含myCircles的所有孩子的数组。