2012-03-24 6 views
1

あなたのためにすべての質問があります!私は、それぞれのnav項目が外部の.swfとしてロードされる私のWebサイト用のナビゲーションシステムを作ろうとしています。このサイトのanother userのおかげで、私はその機能を利用できるようになりました。問題は、これらの外部swfsのプリローダーも追加したいということです。AS3 - ヌルローダーを使用しているときに外部の.swfプリローダーを追加する

私が働いているコードはこれです:私が試した

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); 
} 

これまでのところ、すべてが短い来ています。ヌルローダーを使用しないと、プリローダーが動作することがありますが、そうすると別の.swfをロードするときに使用されているアセットを削除する方法がわかりません - すべてがスタックしてサイトを暴落させます。上記のコードに添付されているプリローダーを試してみると、nullオブジェクトを呼び出すためにエラーが発生します。そんな初心者ですみません、私はちょうどフラッシュの周りに私の頭を包み始めました。私は助けていただきありがとうございます!

編集:ここではプリローダーが含まれて私のややごちゃ混ぜバージョンで簡単に見だが、原因は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:機能コードが、現在は次の受信私がボタンを押すたびに出力エラー。 swfのロードとアンロードはうまくいっていますが、出力エラーを避けるためにどのようにクリーンアップできるか知っていれば、できるだけスムーズにしたいと考えています:

ArgumentError:Error#2025:呼び出し元の子であること。 )(METHODINFO-8で は、flash.display ::のDisplayObjectContainer /のremoveChild()で

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); 
} 

答えて

0

いけないだけLoaderクラスのアンロード方法を使用し、ヌルを使用します。

Loader.unload() 
+0

おかげで、私はこの作業を取得しようとしている(私は既存のコードの機能的側面を離れて選ぶことによって学ぶことは簡単ですので、ドキュメントは、かなり貧弱であると思われる)が、いずれかのアンロードを挿入する時、これまで試みていますまたはunloadAndStopによってエラー1061が発生しました:未定義のメソッドunloadAndStopを静的型Classの参照を使用して呼び出します。そのため、スクリプトの残りの部分をどのようにラップするかを正確に並べ替えることさえできません。このエラーについて私が知る唯一の情報は、Flash 10以上で実行する必要があるということでしたが、私はすでにそれをやっています。 = | – DoomJTHM

+0

こんにちは、もちろん、ローダーのインスタンスでunloadを呼び出す必要があります:loader:Loader = new Loader();スクリプトの後半でloader.unload()を実行します。 – mpm

+0

よかった、もう一度ありがとう!私は機能するコードを稼働させることができましたが、今は出力エラーが発生しています。私は使用しているコードと私が得ているエラーでオリジナルの投稿を編集しました。 – DoomJTHM

関連する問題