ActionScript如何访问子Sprite

时间:2015-12-04 13:14:40

标签: actionscript-3 flash

我有以下问题。如果有人煞费苦心地回答它,我将不胜感激。

问题描述:我有一个顶级精灵" TopLevel", 它下面有一个精灵" allRoutes", 它下面有儿童雪碧"路线"和 在它下面还有另一个孩子"路线"。

我想在循环中访问每个级别。我试过在ActionScript中做到这一点,但没有成功。

这是可能的代码(未成功编译):

package 
{
    import flash.display.Sprite;

    public class TopLevel extends Sprite {
        public function TopLevel() {
            var allRoutes:Sprite = new Sprite();
            for (i = 0; i < 3; i++) {
                var routes:Sprite = new Sprite();
                for (j = 0; j < 4; j++) {
                    var route:Sprite = new Sprite();
                    route.name = "Route:" + i + ", " j;
                    routes.addChild(route);
                }
                routes.name = "Routes:" + i;
                allRoutes.name = "AllRoutes";
                allRoutes.addChild(routes);
            }
            addChild(allRoutes);

            trace (allRoutes.name);
            for (i = 0; i < allRoutes.numChildren; i++) {
                trace(allRoutes.getChildAt(i).name);
                for (j = 0; j < allRoutes.getChildAt(i).numChildren; j++) {
                    trace(allRoutes.getChildAt(i).getChildAt(j).name);
                }
            }
        }
    }
}

我期待以下结果:

AllRoutes

路线-1

路线-1,

路线-1,

路线-1,3

路线-1,4

路线-2

路线-2,

路线-2,

路线2,3,

路线-2,4

等......

希望你能得到这张照片。 非常感谢你提前。

感谢和问候

rr23850

1 个答案:

答案 0 :(得分:0)

在全球范围内,您的代码很好,除了一些小东西:

  • 您忘记声明ij变量:
var i:int, j:int;
  • 您忘记了此行中j之前的连接运算符:
route.name = "Route:" + i + ", " + j;
  • 如果您正在使用strict mode进行编译,则这些说明会触发错误:
allRoutes.getChildAt(i).numChildren

allRoutes.getChildAt(i).getChildAt(j).name

在这种情况下可以:

for (j = 0; j < Sprite(allRoutes.getChildAt(i)).numChildren; j++) 
{
    trace(Sprite(allRoutes.getChildAt(i)).getChildAt(j).name);
}

...

for循环以0开头时,你会得到这样的结果:

AllRoutes
Routes:0
Route:0, 0
Route:0, 1
Route:0, 2
Route:0, 3
Routes:1
Route:1, 0
Route:1, 1
...

希望可以提供帮助。