我有一个FLA文档,其中包含名为“mc_walls”的影片剪辑。此影片剪辑在影片中超过50次,我没有为每个影片剪辑分配实例名称。
我想知道是否有办法使用一些动作来添加实例名称?
我希望所有“mc_walls”都有“墙”这个名字。
我试过这段代码:
mc_wall.name = "wall";
但它会返回此错误:
1119: Access of possibly undefined property name through a reference with static type Class.
帮助会很棒:)
非常感谢,
彼得
答案 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;