我开发了一个代码,用于加载影片剪辑,与两个动态文本进行比较。
如果动态文本大于另一个,它将在特定的影片剪辑中休息。我正在尝试开发一种比较数字的光标系统。
动作脚本从.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 :(得分:0)
有几种方法可以实现这一目标。我会展示其中几个。
将new_clp
var global设置为当前班级或时间轴(将其声明移至与计时器相同的位置)
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)
浏览当前作用域显示列表并删除所有clp_01
和clp_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)
内存管理要考虑的其他因素是,如果你只有两个片段,只要让它们一直加载,并在每个定时器滴答时改变它们的可见性:
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;