2012-05-03 112 views
0

所以我給我的庫中的影片剪輯,我已經添加到舞臺,它包含多個組件,我已經能夠獲得有關這些使用信息:孩子,但通過指數的ActionScript 3的接取孩子

try 
{ 
    for (i = 0; i < musicControls.numChildren; i++){ 
     trace ('\t|\t ' +i+'.\t name:' + musicControls.getChildAt(i).name + '\t type:' + typeof (musicControls.getChildAt(i))+ '\t' + musicControls.getChildAt(i));  
    } 
} 
catch (error:Error) 
{ 
    trace("Failed:", error.message); 
} 

上面的腳本返回了下面的信息。我想問一下現在是否有一種通過索引訪問這些孩子的方法。例如,動畫片段內的其中一個組件是進度條,我將如何引用它?我嘗試使用getChildByName,但它不工作,並尋找幫助時,大家都說使用它很慢。我很抱歉,如果這是一個basiuc問題,我不是很擅長as3。

| 0. name:plyControl  type:object [object Button] 
| 1. name:stopControl type:object [object Button] 
| 2. name:nextControl type:object [object Button] 
| 3. name:prevControl type:object [object Button] 
| 4. name:progressControl type:object [object ProgressBar] 
| 5. name:volControl  type:object [object Slider] 
| 6. name:__id11_ type:object [object MovieClip] 
| 7. name:__id12_ type:object [object TLFTextField] 
| 8. name:instance71  type:object [object MovieClip] 
| 9. name:vizControl  type:object [object ComboBox] 
| 10.  name:__id13_ type:object [object MovieClip] 
| 11.  name:__id14_ type:object [object TLFTextField] 
| 12.  name:instance74  type:object [object MovieClip] 
| 13.  name:__id15_ type:object [object MovieClip] 
| 14.  name:timeControl type:object [object TLFTextField] 
| 15.  name:instance75  type:object [object MovieClip] 

編輯:或者在語法和拼寫由它的外觀很不錯....

+0

您應該很少需要通過索引或名稱獲取孩子,您應該在創建對象時持有該對象的引用。 – Neil

+0

那麼我所做的就是在圖書館裏製作一個動畫片段,裏面放置了我所有的音樂控件,而不必單獨將它們添加到舞臺上,然後轉到定位每個動畫並固定它的方式等等,這似乎是更快捷的選項對我來說。在這樣的第一個地方加入他們的唯一原因是因爲當我改變框架,如果你不離開框架,他們不離開孩子,他們留在那裏,否則我會把我所有的組件手動放在舞臺上。 – Sam

+0

很高興你得到它的工作 – Neil

回答

2

是下面的代碼不能正常工作?

var progressBar:ProgressBar = musicControls.getChildByName("progressControl") as ProgressBar; 
if(progressBar) 
    // doStuff 

你說getChildByName不工作你得到什麼錯誤信息?

+0

這是我編譯時得到的: 場景1,圖層'函數',幀1,行137 \t 1046:未找到類型或不是編譯時常量:ProgressBar。 – Sam

+1

看起來像ProgressBar的定義丟失。它是一種自定義類型嗎?閃光控制?確保你導入ProgressBar。 –

+0

噢是的,進口可能會有所幫助...即時通訊我會嘗試。 – Sam

1

你正朝着正確的方向前進,實際上已經證明你可以通過演示。 在圖書館資產的舞臺上實例化的任何對象將始終具有相同的索引結構(它基本上是原始代理)。因此,如果你知道哪一層的進度條上,你的參考應該是這樣的:

myPointer = musicControls.getChildAt(4);

如果你想獲得一個孩子通過索引的孩子,你可以這樣做:

musicControls.getChildAt(4).getChildAt(0);

而且你可以在dot.notation語法中混合和匹配你的操作,因爲(在每一步)代碼都是從一個函數調用中解析出來並進入它返回的對象中。

this.getChildByName("musicControls").progressControl.getChildAt(0)

我希望澄清的事情。

+0

你知道你有上面設置的myPointer是你稍後提到的設置進度條時使用它的一些東西:progressBar.setProgress(playbackPercent.value,100); 還是我不明白? – Sam

+0

我認爲它的一些東西,我想問題,因爲這:(音樂控制。getChildAt(14)的.text);將無法正常工作,但是:(musicControls.getChildAt(14).name);會這樣,因爲我試圖訪問的東西不直接accesible我的方式嘗試? – Sam

+1

musicControls.getChildAt(14)將返回第14層的對象。 因此,'musicControls.getChildAt(14)'變爲'[object TLFTextField]'。 TextField對象具有很多屬性,其中一個屬性是name屬性,它的名稱值是「timeControl」。如果你想設置文本字段的文本值,那麼執行'musicControls.getChildAt(14).text =「Hello World!」;'然而,如果你想要的只是TextField,你只需要' musicControls.getChildAt(14)' – Atriace