作者etrexetrex (moonet)
看板Flash
標題[問題] 外部載入的 loader API 設計
時間Fri Jul 16 20:16:51 2010
在本篇討論的外部載入資料沒有限定型態
但本篇以影片為例,討論外部載入與內部匯入資料的整合
一個外部載入的影片API可能是這樣設計的
1.需要在建構式傳入檔案路徑
var f1:FLVLoader = new FLVLoader("檔案路徑");
或者用方法傳入
var f1:FLVLoader = new FLVLoader();
f1.load("檔案路徑");
2.需要監聽載入完畢的事件
f1.addEventListener(Event.READY, readyHandler);
function readyHandler(e:Event):void{
f.play();
}
但對於一個內部匯入的FLV來說應該是可以直接使用
f2.play();
我的問題點在於如何設計一個API,可以整合外部載入與內部匯入的不同步性質
舉例來說我想要控制動畫流程,所以我作了一個 PlayList 類別
假設是這樣使用的:
var pl:PlayList = new PlayList();
pl.add(f1);
pl.add(f2);
pl.play();
因為不能保證 f1 跟 f2 已經載入完畢,所以上面的寫法在 play 時可能會出問題
那麼我可能就被迫改成用事件驅動的寫法
var pl:PlayList = new PlayList();
pl.add(f1);
pl.add(f2);
pl.addEventListener(Event.READY, readyHandler2);
function readyHandler2(e:Event):void{
pl.play();
}
但是如果這樣寫就會有些不方便的地方
因為可能f1 跟 f2 都是內部匯入
這樣就有一種多此一舉的感覺
但為了通用性,可能也就只有事件驅動的寫法比較好了
我想請問的是有沒有一個架構已經解決這種問題
--
blog:
http://etrex.blogspot.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.42.70.146
→ etrexetrex:事實上如果f1跟f2 都是內部匯入 可能READY事件不會被驅 07/16 20:18
→ etrexetrex:動 因為根本不需要等待 07/16 20:18
→ etrexetrex:然後程式碼就毀掉這樣 不然就是要寫一堆判斷去維護他 07/16 20:18
推 cjcat2266:那麼把等待的code寫在play()裡面咧? 07/16 21:06
→ etrexetrex:有想過 不過我擔心的是 API 的 user 無法預期程式流程 07/16 21:10
→ etrexetrex:原先的想法是 play 如果在還沒ready 的時間點呼叫 07/16 21:11
→ etrexetrex:就會自動監聽ready 事件這樣 不過我不知道這樣做會不會 07/16 21:11
→ etrexetrex:讓 user 遇到 lag 時產生困惑之類的問題 07/16 21:11