作者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
1F:→ etrexetrex:事实上如果f1跟f2 都是内部汇入 可能READY事件不会被驱 07/16 20:18
2F:→ etrexetrex:动 因为根本不需要等待 07/16 20:18
3F:→ etrexetrex:然後程式码就毁掉这样 不然就是要写一堆判断去维护他 07/16 20:18
4F:推 cjcat2266:那麽把等待的code写在play()里面咧? 07/16 21:06
5F:→ etrexetrex:有想过 不过我担心的是 API 的 user 无法预期程式流程 07/16 21:10
6F:→ etrexetrex:原先的想法是 play 如果在还没ready 的时间点呼叫 07/16 21:11
7F:→ etrexetrex:就会自动监听ready 事件这样 不过我不知道这样做会不会 07/16 21:11
8F:→ etrexetrex:让 user 遇到 lag 时产生困惑之类的问题 07/16 21:11