Выгрузить несколько проблем SWF в ActionScript 3.0 - PullRequest
0 голосов
/ 01 апреля 2011

У меня проблема с использованием памяти во флеше, я успешно выгрузил и удалил загруженный SWF со сцены, но я не могу удалить загруженную память, а также частота кадров падает с 30 до 18.

  1. Как загрузить SWF в память

    • У меня есть swfUrlArray Array , где я храню имена SWF (например, intro.swf).
    • У меня есть 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);
    
  2. Удаление SWF в цикле

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

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


Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Вы очищаете swfUrlArray ВНУТРИ цикла for. Таким образом, он только разгрузит AndStop и обнаружит, что длина массива равна 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 голосов
/ 01 апреля 2011

Является ли swfModules словарем?Кажется, он все еще содержит ссылку на загруженный SWF.Используйте delete swfModules[url], чтобы удалить элемент из словаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...