2014-12-05 92 views
0

我開發了一個代碼,用於加載一個影片剪輯,並與兩個動態文本進行比較。卸載MovieClip和RemoveChild AS3

如果動態文本大於另一個,它將午餐特定的影片剪輯。我試圖開發一個比較數字的燈光系統。

動作腳本正在從.txt文件導入數據(使用EXCEL和VBA導出)。我創建了一個代碼來使用計時器重新加載所有數據。我創建它,所以沒有必要重新打開.swf文件。

這裏是自動重新加載代碼:

// timer loading 
var timer:Timer = new Timer(2500); 
timer.addEventListener(TimerEvent.TIMER, onTimer); 
timer.start(); 

現在,該代碼被應用到所有行動,包括採取行動重新下載txt文件,那就是:

function onTimer(evt:TimerEvent):void { //primeiro indicador parte 
    var loader:URLLoader = new URLLoader(new URLRequest("bdaily.txt")); 
    loader.addEventListener(Event.COMPLETE, completeHandler); 

function completeHandler(event:Event):void { 
    var loadedText:URLLoader = URLLoader(event.target); bdaily.text = loadedText.data; 
} 

現在,此代碼正在比較.txt(動態文本)和加載或不加載新影片剪輯。

var clp_index = parseInt(bdaily.text) >= parseInt(basketdtarget.text) ? 1 : 2 
var new_clp = clp_index == 1 ? new clp_01() : new clp_02() 
addChild(new_clp) 

的問題是:

- >一切正常,所有的數據被加載並在動態文本被示出。

真實情況是,由於循環定時器設置,所有影片剪輯都在無限循環中加載,因此會消耗大量內存。該代碼正在工作,但它的加載電影剪輯位於影片剪輯之上。

我需要實現我的代碼,然後再次調用循環後插入代碼以清除影片剪輯。

+0

所以代碼的第三塊每次運行時間(你實例化一個新的'clp_01'或'clip_02'要卸載/刪除所有以前的?所以在屏幕上一次只有一個? – BadFeelingAboutThis 2014-12-05 17:06:24

+0

您是否找到解決方案? – BadFeelingAboutThis 2014-12-29 17:26:01

回答

0

有幾種方法可以完成此操作。我會展示其中的幾個。

  1. 讓您new_clp VAR全球當前類或時間表(移動它的聲明同一個地方作爲你的定時器)

    var timer:Timer = new Timer(2500); 
    timer.addEventListener(TimerEvent.TIMER, onTimer); 
    timer.start(); 
    
    var new_clp:DisplayObject; 
    

    然後,創建一個新的剪輯之前將其刪除:

    if(new_clp){ //if there is already something in this variable, then remove it 
        removeChild(new_clp); 
    } 
    
    var clp_index = parseInt(bdaily.text) >= parseInt(basketdtarget.text) ? 1 : 2 
    new_clp = clp_index == 1 ? new clp_01() : new clp_02() 
    addChild(new_clp) 
    
  2. 步行當前示波器顯示列表並刪除所有clp_01clp_02實例:

    var i:int = numChildren; 
    while(i--){ 
        if(getChildAt(i) is clp_01 || getChildAt(i) is clp_02){ 
         removeChild(getChildAt(i)); 
         //if you have any listeners attached to the object, remove them now 
        } 
    } 
    
    var clp_index = parseInt(bdaily.text) >= parseInt(basketdtarget.text) ? 1 : 2 
    var new_clp = clp_index == 1 ? new clp_01() : new clp_02() 
    addChild(new_clp) 
    
  3. 別的東西要考慮內存管理,就是如果你只有兩個夾子,只是讓他們都加載所有的時間,並改變它們的知名度每個計時器滴答:

    var timer:Timer = new Timer(2500); 
    timer.addEventListener(TimerEvent.TIMER, onTimer); 
    timer.start(); 
    
    var clp1:clp_01 = new clp_01; 
    var clp2:clp_02 = new clp_02; 
    
    addChild(clp1); 
    addChild(clp2); 
    

    然後在你的代碼塊等:

    var clp_index = parseInt(bdaily.text) >= parseInt(basketdtarget.text) ? 1 : 2 
    clp1.visible = clp_index == 1; 
    clp2.visible = clp_index == 2;