2013-05-05 89 views
0

我有一个名为“mc_walls”的影片剪辑的FLA文档。这部电影剪辑在电影中超过50次,我还没有为每部电影剪辑分配一个实例名称。如何将实例名称添加到使用AS3的影片剪辑中

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

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

我试过这段代码:

mc_wall.name = "wall"; 

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

帮助将是巨大的:)

非常感谢,

彼得

+0

那些墙在你的fla中是否有实例名?或者是当前为它们全部为空的实例名称? – prototypical 2013-05-05 19:55:34

+0

它目前全部都是空的。 – 2013-05-05 20:00:26

+0

我看到两个问题。首先,我没有看到具有相同实例名称的所有影片剪辑的优势。其次,即使有实例名称,我也没有看到优势。 – Marty 2013-05-05 23:39:49

回答

2

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

您将遇到的下一个问题是您无法通过代码修改时间轴DisplayObject的名称。所以,你会得到这个错误,即使你没有命名的东西,然后尝试将它从该实例名称改为:

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

我的想法是,你可能需要了解的阵列,而不是使用name属性作为您管理影片剪辑集合(例如墙壁)的方式。例如,如果我确实在时间轴上有它们,我会将它们放入另一个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 
    } 
} 
0

如果你想名字在影片剪辑控制后,同样的场景,这可能与阵列工作:

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;