[英]AS3 - Adding an external .swf preloader when using null loader
給大家一個問題! 我正在嘗試為我的網站創建一個導航系統,其中每個導航項都作為外部.swf加載。 感謝此站點上的另一個用戶 ,我能夠使用該功能。 問題是我也想為這些外部swfs添加預加載器。
我正在使用的代碼是這樣的:
var loadedSWF:Loader = null;
/**
* Loads an SWF and adds it to container once complete
* @param file The URL to the SWF to load
* @param container The container to add the SWF to
*/
function loadSWF(file:String, container:MovieClip=null):void
{
if(container == null) container = MovieClip(root);
// removes the previously loaded SWF
if(loadedSWF != null)
{
if(loadedSWF.parent) loadedSWF.parent.removeChild(loadedSWF);
}
var req:URLRequest = new URLRequest(file);
loadedSWF = new Loader();
loadedSWF.load(req);
addChild(loadedSWF);
}
menu_mc.test_btn.addEventListener(MouseEvent.CLICK, _click);
function _click(e:MouseEvent):void
{
loadSWF("testmovie.swf");
loadedSWF.x = 0;
loadedSWF.y = 125;
var otherindex = getChildIndex(Border);
setChildIndex(loadedSWF, otherindex + 1);
}
到目前為止,我嘗試過的所有內容都不多。 如果不使用null加載程序,則可以使preloader正常工作,但是當我這樣做時,我不確定如何在加載另一個.swf時如何使用它來刪除正在使用的資產-所有內容都會在該網站上堆積並造成沼澤。 如果我嘗試將附加到上述代碼的預加載器放在一起,則會出錯,因為我正在調用null對象。 很抱歉成為這樣的新手,我才剛剛開始將頭纏在閃光燈上。 感謝您的幫助!
編輯:這是我有點混亂的版本的快速瀏覽,其中包括一個預加載器,但由於空加載器而無法使用:
var loadedSWF:Loader = null;
/**
* Loads an SWF and adds it to container once complete
* @param file The URL to the SWF to load
* @param container The container to add the SWF to
*/
function loadSWF(file:String, container:MovieClip=null):void
{
if(container == null) container = MovieClip(root);
// removes the previously loaded SWF
if(loadedSWF != null)
{
if(loadedSWF.parent) loadedSWF.parent.removeChild(loadedSWF);
}
loadedSWF.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
loadedSWF.contentLoaderInfo.addEventListener(Event.COMPLETE, loadProdComplete);
var req:URLRequest = new URLRequest(file);
loadedSWF = new Loader();
loadedSWF.load(req);
function loadProdComplete(e:Event):void {
trace("swf file loaded");
//remove the preloader from container clip
removeChild(preLoader);
// add the loaded swf to container clip
addChild(loadedSWF);
currentSWF = MovieClip(loadedSWF.content);
currentSWF.gotoAndPlay(1);
currentSWF.addEventListener(Event.ENTER_FRAME , checkLastFrame);
function checkLastFrame(e:Event):void {
if (currentSWF.currentFrame == currentSWF.totalFrames) {
currentSWF.stop();
// trace("stopped");
}
}
}
var preLoader:loader = new loader();
//position the loading bar
preLoader.x = 155;
preLoader.y = 185;
addChild(preLoader);
function onProgressHandler(event:ProgressEvent){
var dataAmountLoaded:Number=event.bytesLoaded/event.bytesTotal*100;
preLoader.bar.scaleX = dataAmountLoaded/100;
preLoader.lpc.text= int(dataAmountLoaded)+"%";
trace(preLoader.bar.scaleX );
}
}
var currentSWF:MovieClip = new MovieClip();
menu_mc.test_btn.addEventListener(MouseEvent.CLICK, _click);
function _click(e:MouseEvent):void
{
loadSWF("testmovie.swf");
loadedSWF.x = 0;
loadedSWF.y = 125;
var otherindex = getChildIndex(Border);
setChildIndex(loadedSWF, otherindex + 1);
}
編輯#2:功能代碼,但是現在每當我按下按鈕時都會收到以下輸出錯誤。 swfs的加載和卸載都很好,但是如果有人知道如何清理它以避免輸出錯誤,我想使其盡可能平滑!
ArgumentError:錯誤#2025:提供的DisplayObject必須是調用方的子級。 在flash.display :: DisplayObjectContainer / removeChild()在MethodInfo-8()
var container:MovieClip = new MovieClip();
var currentSWF:MovieClip = new MovieClip();
var swfLoader:Loader = new Loader();
function launchSWF(vBox, vFile):void{
//vBox.addChild(swfLoader);
var swfURL:URLRequest = new URLRequest(vFile);
swfLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadProdComplete);
swfLoader.load(swfURL);
function loadProdComplete(e:Event):void {
trace("swf file loaded");
vBox.removeChild(preLoader);
vBox.addChild(swfLoader);
currentSWF = MovieClip(swfLoader.content);
currentSWF.gotoAndPlay(1);
currentSWF.addEventListener(Event.ENTER_FRAME , checkLastFrame);
function checkLastFrame(e:Event):void {
if (currentSWF.currentFrame == currentSWF.totalFrames) {
currentSWF.stop();
// trace("DONE");
}
}
}
var preLoader:loader = new loader();
preLoader.x = 155;
preLoader.y = 185;
vBox.addChild(preLoader);
function onProgressHandler(event:ProgressEvent){
var dataAmountLoaded:Number=event.bytesLoaded/event.bytesTotal*100;
preLoader.bar.scaleX = dataAmountLoaded/100;
preLoader.lpc.text= int(dataAmountLoaded)+"%";
trace(preLoader.bar.scaleX );
}
}
test_btn.addEventListener(MouseEvent.CLICK, _load);
function _load(e:Event):void{
swfLoader.unloadAndStop();
var swfFile:String = 'test.swf';
launchSWF(container, swfFile);
//put it on stage
addChild(container);
}
不要使用null,而只需使用Loader類的unload方法。
Loader.unload()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.