0

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

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

我希望所有“mc_walls”的名称都为“wall”。

我试过这段代码:

mc_wall.name = "wall";

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

帮助会很大:)

非常感谢,

彼得

4

2 回答 2

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
   }
}
于 2013-05-05T20:08:03.877 回答
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;
于 2017-03-29T03:32:54.897 回答