Проверка "Использовать количество" для элементов библиотеки с JSFL

Я провел небольшое исследование, и из того, что я прочитал, в JSFL нет эквивалента для "Выбор неиспользуемых элементов" в Flash IDE.

Кто-нибудь знает свойство, чтобы хотя бы быть в состоянии проверить, используется ли элемент, перебирая всю библиотеку? что-то вроде item.useCount...

Я проверяю документацию Adobe и ничего не могу найти...

2 ответа

РЕДАКТИРОВАТЬ: Таким образом, я только что наткнулся на этот аккуратный маленький пункт меню, который выбирает неиспользуемые пункты... не требуется JSFL. Он скрыт в контекстном раскрывающемся списке в заголовке панели библиотеки. Нажмите на это выпадающее меню и нажмите "Выбрать неиспользуемые элементы". Flash выберет все неиспользуемые элементы библиотеки и даже пропустит элементы с именами связей для динамической реализации. Так что это действительно ваше дело... вы можете использовать этот метод или сценарий ниже.

Я не могу взять полный кредит за код, который вы видите ниже, потому что я беру некоторый код, с которым я столкнулся из существующего скрипта, расположенного здесь:

ТОПЛИВО - Лучше использовать Счет

Скрипт в том виде, в котором он существует, проверяет счетчик использования выбранного вручную элемента библиотеки. Он очень умный в дизайне, он даже проверяет, содержит ли предмет название связки, но не обязательно находится на сцене. Это сделано для того, чтобы вы не удаляли элементы, которые могут быть созданы динамически. Что я сделал, так это то, что я взял существующий код и поместил его в цикл for, который выполняет проверку на основе текущего элемента цикла.

// Remove Unused Library Symbols


var dom = fl.getDocumentDOM();
if (dom == null)
{
    alert('Please open a file.');
}
else
{
    var lib = dom.library;
    var activeItem;
    var isFound;
    var item;
    var libItems = lib.items;

    fl.outputPanel.clear();

    for ( var i = 0; i < libItems.length; i++ )
    {
        var curLibItemName = libItems[i].name;
        var curLibItemSelection = lib.selectItem(curLibItemName, true, true);
        var selectedItem = lib.getSelectedItems();

        function scanTimeline(_timeline, _mainTimeline)
        {
            var timeline = _timeline;
            var layerCount = timeline.layerCount;

            while (layerCount--)
            {
                var frameCount = timeline.layers[layerCount].frameCount;

                while (frameCount--)
                {
                    if (timeline.layers[layerCount].frames[frameCount] == undefined)
                    {
                        continue;
                    }

                    var elems = timeline.layers[layerCount].frames[frameCount].elements;
                    var p = elems.length;

                    while (p--)
                    {
                        // Check if it's an instance in the library
                        if (elems[p].elementType == 'instance')
                        {
                            // Check if it's the same clip as our active check
                            if (elems[p].libraryItem.name == activeItem.name)
                            {
                                found = true;
                                var where;

                                if(_mainTimeline == true)
                                {
                                    where = 'Located in the main timeline.';
                                }
                                else
                                {
                                    where = 'Located in the library item: ' + item.name;
                                }

                                frameCount = 0;
                            }
                        }
                    }
                }
            }
        }

        function scanLibrary()
        {
            var items = lib.items;

            for (var i = 0; i < items.length; i++)
            {
                item = items[i];

                if(item.itemType == 'movie clip')
                {
                    scanTimeline(item.timeline, false);
                }
            }
        }

        // Safety check
        if (selectedItem.length == 0)
        {
            alert('Please make a selection in the library.');
        }
        else
        {
            activeItem = selectedItem[0];
            found = false;

            // Scan the main timeline first
            scanTimeline(dom.getTimeline(), true);

            // Scan the library
            scanLibrary();

            if (found == false)
            {
                if (activeItem.linkageClassName != undefined)
                {
                    fl.trace(curLibItemName + ' was not found on the stage, but it does have a linkage name so it may be instantiated dynamically.  Use caution before deleting.');
                }
                else
                {
                    fl.trace(curLibItemName + ' was not found on the stage and will be removed.');
                    lib.deleteItem(curLibItemName);
                }
            }
        }   
    }
}

Как я уже говорил, я не могу взять на себя всю ответственность за это, потому что первоначальный разработчик сценария сделал большую часть тяжелой работы для этой команды. На странице ТОПЛИВО, которая содержит оригинальный код, видно, что Джулиан Дольче отвечает за эту работу. Лицензионный код для оригинала - Лицензия MIT (MIT).

Вы можете скопировать приведенный выше код в новый документ JSFL и сохранить его в своей папке команд или загрузить файл jsfl по ссылке ниже и поместить его в свою папку команд.

Скачать: Удалить неиспользуемую библиотеку Symbols.jsfl

Надеюсь, это поможет.

Выбор неиспользуемых элементов библиотеки - Flash Pro CC

var unusedArr = fl.getDocumentDOM().library.unusedItems;

for(var i=0;i<unusedArr.length;i++) 
    fl.getDocumentDOM().library.selectItem(unusedArr[i].name,false,true);

fl.trace(unusedArr.length+' Items selected');
Другие вопросы по тегам