如何使用AS3将实例名称添加到动画片段

时间:2013-05-05 19:47:35

标签: actionscript-3 flash class movieclip

我有一个FLA文档,其中包含名为“mc_walls”的影片剪辑。此影片剪辑在影片中超过50次,我没有为每个影片剪辑分配实例名称。

我想知道是否有办法使用一些动作来添加实例名称?

我希望所有“mc_walls”都有“墙”这个名字。

我试过这段代码:

mc_wall.name = "wall";

但它会返回此错误: 1119: Access of possibly undefined property name through a reference with static type Class.

帮助会很棒:)

非常感谢,

彼得

2 个答案:

答案 0 :(得分:2)

我的猜测是,舞台上没有实例名称mc_wall的实例,这就是为什么你得到了未定义的属性错误。如果没有实例名称,则无法通过实例名称访问它,对吧?

您将遇到的下一个问题是您无法通过代码修改时间轴DisplayObject的名称。因此,即使您确实给它命名,然后尝试从该实例名称更改它,您也会收到此错误:

The name property of a Timeline-placed object cannot be modified.

我的想法是,您可能需要了解数组,而不是使用name属性作为管理MovieClip集合(如墙壁)的方式。

例如,如果我确实在时间轴上有它们,我将它们放在另一个MovieClip中,基本上将它用作我所有墙壁的容器并命名该实例" wall_container"。然后在代码中我这样做:

var walls:Array = new Array;
for (var index:int = 0;index < wall_container.numChildren;index++)
{
    var wall:MovieClip = wall_container.getChildAt(index) as MovieClip;
    walls.push(wall);
}

现在,如果我想访问一个单独的墙,我可以去:

var wall:MovieClip = walls[5] as MovieClip;

或遍历所有墙壁进行碰撞检查或我可以去的地方:

for (var index:int= 0;index < walls.length;index++)
{
   var wall:MovieClip = walls[index] as MovieClip;
   wall.x = 500;
   wall.y = 200;
   // do whatever you want to do with that wall

   //check collision ?
   if (player.hitTestObject(wall))
   {
       // handle collision with the wall
   }
}

答案 1 :(得分:0)

如果您之后尝试在同一场景中为MovieClip命名以进行控制,则可以使用数组:

var wall:Array = new Array();

for (var i: int = 0; i < 3; ++i) {

    var mc:Rampart = new Rampart();

    wall[i] = mc;

    mc.y = 100 * (i+1);
    mc.x = 100;

    addChild(mc);
}

wall[0].x = 300;