2014-12-05 2 views
0

Я разработал код, который загрузит фрагмент ролика, сделав сравнение с двумя динамическими текстами.Unload MovieClip и RemoveChild AS3

Если динамический текст больше, чем другой, он обедает в определенном фрагменте ролика. Я пытаюсь разработать систему световых знаков, сравнивая числа.

Action script импортирует данные из 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) 

ПРОБЛЕМА IS:

-> Все работает отлично, все данные загружаются и отображаются в динамическом тексте.

Реальным является то, что все видеоклипы загружаются в бесконечный цикл из-за установленного таймера цикла, потребляется много памяти RAM. Код работает, но загружает видеоклипы над фрагментом ролика.

Мне нужно реализовать свой код и вставить код для удаления видеоклипов после вызова цикла снова.

+0

Так каждый раз, когда третий блок кода выполняется (где экземпляр нового 'clp_01' или' clip_02' вас хотят выгрузить/удалить все предыдущие? так что есть только один на экране за раз? – BadFeelingAboutThis

+0

Вы нашли решение? – BadFeelingAboutThis

ответ

0

Есть несколько способов, которыми вы можете это выполнить. Я покажу пару из них.

  1. Сделайте new_clp вар глобальной для текущего класса или сроки (переместить это заявление в том же месте, как ваш таймер)

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