Проверка "Использовать количество" для элементов библиотеки с 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');