我試圖創建一個簡單的「通用」媒體播放器呈現的視頻和音頻播放相同的用戶界面(或儘可能相似)。不幸的是,據我所知,FLVPlayback似乎無法處理音頻文件,所以我使用了Sound和SoundChannel。
我的視頻播放是使用FLVPlayback組件進行處理的,FLVPlayback組件在需要時「動態」連接到標準控件。當我播放聲音時,我想要做的就是將它們連接到Sound/SoundChannel,以便在兩種情況下都能使用相同的UI小部件。我想避免從零開始構建所有組件,因爲FLVPlayback組件會免費提供許多好東西,但它開始顯得棘手。
戈裏東西
標準PlayPauseButton是具有兩個層,一個含有播放按鈕(和實例名稱爲play_mc)和含暫停按鈕(pause_mc)一個MovieClip。其中一個是這樣的一些代碼的電影:
stop();
this.upLinkageID = "PauseButtonNormal";
this.overLinkageID = "PauseButtonOver";
this.downLinkageID = "PauseButtonDown";
this.disabledLinkageID = "PauseButtonDisabled";
該電影有兩個幀。
第一幀是一個帶有實例名稱placeholder_mc的單個動畫片段。
在第二幀是按鈕狀態的實例,但它們沒有實例名稱(這會使事情變得更容易)。但是,它們是上面列出名稱的庫對象的實例。
我想要做的是編寫一個函數,當傳遞這些按鈕之一(pause_mc,比如說)時,它會自動爲其添加類似按鈕的行爲。我無法從Adobe的「文檔」中找到這一點,我該如何使用嵌入在影片剪輯代碼中的信息將placeholder_mc的內容與我想要的東西交換。
TL;博士
在本質上我只需要實現的功能set_instance所以,下面的代碼改變了按鈕的可視狀態如預期:
var my_button:MovieClip = pause_mc;
my_button.addEventListener(MouseEvent.MOUSE_OVER, function(e:Event){
set_instance(my_button.placeholder_mc, my_button.overLinkageID);
});
我很久以前就採用類似的方式實現了我的播放器。我把這個問題部分地作爲一個咆哮(AS3類庫在這方面是絕對可怕的,儘管它是一個「綠色領域」重寫同樣可怕的AS2類庫),部分希望有人會知道一個更聰明的解決方案,可以節省一些工作... – podperson