2014-12-05 60 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;