作者cjcat2266 (CJ Cat)
看板Flash
標題Re: [問題] 請問關於AS3的預載
時間Mon Jul 28 11:50:30 2008
※ 引述《goodray (RAY)》之銘言:
: 請問AS3還是可以這樣寫嗎?還是一定要用另外一個負責載入的
: swf檔來載入主要的swf檔,才能夠作loading bar的效果呢?
先知道,任何需要載入(無論是外部或者內部)的元件(包括.swf檔案)
被載入者(content)與載入者(loader)之間一定會有個LoaderInfo物件存在
它們之間的關係是這樣的:
Loader ───────────── Content
│ │
│ │
└───── LoaderInfo ─────┘
contentLoaderInfo→ ←loaderInfo
LoaderInfo是個EventDispatcher
一切載入的相關數據都由它的事件提供
所以你說的兩種方法都可以做到
只是看你要把誰當作loader,誰當作content而已
1.載入寫在第一格
→相當於stage是loader,.swf本身是content
所以第一格就這樣寫:
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, p);
this.loaderInfo.addEventListener(Event.COMPLETE, c);
function p(e:ProgressEvent):void {
//載入條的長度
loadingBar_mc.scaleX = e.bytesLoaded / e.bytesTotal;
}
function c(e:Event):void {
//載入完成之後想要做的事情
}
2.用一個.swf載入另外一個.swf
→相當於載入者裡面的Loader物件是loader,被載入的.swf則是content
寫法大概是這樣:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEevntListener(
ProgressEvent.PROGRESS, p);
loader.contentLoaderInfo.addEventListener(
Event.COMPLETE, c);
//載入外部.swf
loader.load(new URLRequest("content.swf"));
function p(e:ProgressEvent):void {
//載入條的長度
loadingBar_mc.scaleX = e.bytesLoaded / e.bytesTotal;
}
function c(e:Event):void {
//載入完成之後想要做的事情
//通常是將載入進來的content加到display list上面
addChild(e.content);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.87.91
推 goodray:感謝,我馬上去試試看 :D 07/28 11:53
推 goodray:不好意思,我把上面的程式碼放在第一個影格,會出現如下: 07/28 11:57
→ goodray:1046: 找不到 Type,或它不是編譯時期常數:ProgressEvent 07/28 11:57
推 goodray:原來要import這個事件類別,總算搞定了,太感謝您了! 07/28 12:05