2008-11-05 33 views
0

我想在這個小小的Flash 8/AS2項目中對我的「DOM」引用負責。AS2 MovieClip.getChildByName()的版本?

越來越令人沮喪的是獲取對其他影片剪輯和對象的引用。例如,目前我的代碼訪問表單的提交按鈕看起來是這樣的

var b:Button = _level0.instance4.submitBtn; 

我希望有類似的以AS3的MovieClip.getChildByName()甚至JavaScript的document.getElementById() AS2的實例檢索方法。因爲對這些匿名實例的名稱進行硬編碼(如上面的instance4)只是感覺真的很髒。

但是,我找不到this AS2 Reference

回答

1

如果MovieClip放置在Flash IDE中的舞臺上,則可以在屬性面板中爲其指定正確的實例名稱。

如果它是動態添加,也可以給它一個名字,另外存儲參考:

var my_MC=createEmptyMovieClip("instanceName", depth); 

在這兩種情況下,你就可以用_parentClip.instanceNamemy_MC.

+0

但是,對於深層嵌套的實例,是我唯一的選擇做類似_parentClip.childInstance.anotherChild.anotherChild.aaaaahhh? – 2008-11-05 20:56:41

0

你可以ADRESS他們只是自己寫(代碼沒有測試,但你明白了):

MovieClip.prototype.getElementByName = function(name : String) : Object 
{ 
    var s : String; 
    var mc : Movieclip = null; 

    for(s in this) 
    { 
     if(this[s] instanceof MovieClip) 
     { 
      if(s == name) 
      { 
       mc = this[ s ]; 
       break; 
      } 

      mc = this[s].getElementByName(name); 
     } 
    } 

    return(mc); 
} 
1

有幾種方法可以做到這一點。最簡單的方法是使用數組符號。你前面的例子,它看起來像這樣:

var b:Button = _root.instance4.submitBtn; 

看起來像這樣在數組符號:

var b:Button = _root["instance4"].submitBtn; 

所以,如果你通過已經創建了100個按鍵要循環,並設置透明度爲0:

for(var i:Number = 0; i < 101; i++) 
{ 
    var button:Button = _root["instance"+i].submitBtn; 
    button._alpha = 0; 
} 

您也可以使用eval(「instance4」)來做同樣的事情,但是我對涉及的範圍界定問題有點模糊。