2011-04-01 10 views
0

フラッシュのメモリ使用に問題があり、ロードされた SWFがステージから削除されましたが、ロードされたメモリを削除できず、fpsも30から18に低下しています。私は私がSWF名(addresesのEX。 "intro.swf")を保つswfUrlArrayアレイを持っているメモリにしてActionScript 3.0で複数のSWFの問題を解決する

  • をSWFをロードする方法

    1. 私はを持っています。swfModules Dictonaryここで私はロードされたSWFを保持します。

私はこのようにそれらをロードする:

mLoader = new Loader(); 
var mRequest:URLRequest = new URLRequest(url); 
mLoader.load(mRequest); 
mLoader.x = pozX; 
mLoader.y = pozY; 
swfModules[url] = mLoader; 
swfUrlArray.push(url); 
currentLoaded = url; 
addChild(mLoader); 
  • ループ内でのSWFの削除

    for(var i=0; i < swfUrlArray.length; i++) { 
        if(swfModules[swfUrlArray[i]] != null) { 
         swfModules[swfUrlArray[i]].unloadAndStop(); 
         removeChild(swfModules[swfUrlArray[i]]); 
        } 
        swfUrlArray=[]; 
    } 
    

    何私はここに疑うことは、ループがアンロードするために点滅するには余りにも速いということですSWFのメモリはすべて です。 この問題の提案や控えをお願いします。


  • 答えて

    0

    swfModules辞書ですか?それはまだ読み込まれたswfの参照を保持しているようです。辞書から項目を削除するにはdelete swfModules[url]を使用してください。

    +0

    参照を削除するように示唆したようにコードを設定しましたが、まだ効果がないようですが、外部SWFでトレースを使用し、出力の外部SWFの参照を削除した後でもトレースコメントが残っています。コメントを投稿していただければ幸いです。私は実験を続けます。ありがとうございました。 – SpaceA

    1

    forfループの内側にswfUrlArrayをクリアします。したがって、配列の長さが0で停止していることがわかります。

    修正コード:

    for(var i=0; i < swfUrlArray.length; i++) { 
        if(swfModules[swfUrlArray[i]] != null) { 
         swfModules[swfUrlArray[i]].unloadAndStop(); 
         removeChild(swfModules[swfUrlArray[i]]); 
        } 
    } 
    swfUrlArray=[]; 
    

    そして@alxxが辞書からswfファイルの参照を削除について言う何をすべきか。

    +0

    ありがとうございました、効果があるようです:)、今私はいくつかのアニメーションが急速にメモリ使用量を増加させる原因と考えています。私はこれをaddEventListener(Event.ENTER_FRAME、enterFrameHandler)でテストしました。 function enterFrameHandler(event:Event):void { \t trace( "インターバルシステムトレース" + System.totalMemory/1024); } – SpaceA

    関連する問題