2013-05-05 94 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;