2013-03-27 62 views
1

我已經做了一些調查,從我讀過似乎在JSFL沒有類似的Flash IDE中的「選擇未使用的項目」「使用計數」。檢查庫項目與JSFL

有誰知道至少能夠檢查屬性,如果該項目被用於通過全庫騎自行車嗎?像item.useCount ...

我檢查的Adobe文件和我無法找到任何東西...

回答

2

編輯:所以我只跨過選擇的閒置物品這個整潔的小菜單項來了。 ..不需要JSFL。它隱藏在庫面板頭部的上下文下拉菜單中。點擊該下拉菜單並點擊「選擇未使用的項目」。 Flash將選擇所有未使用的庫項目,它甚至會跳過具有動態實例化鏈接名稱的項目。所以這真的取決於你......你可以使用這個方法或下面的腳本。

我不能充分信貸的代碼你看到下面的,因爲我是把一些代碼,我從位於這裏現有的腳本碰到:

FUEL - Better Use Count

因爲它的存在會檢查該腳本使用手動選擇的庫項目的數量。它在設計上非常聰明,它甚至檢查項目是否包含鏈接名稱,但可能不一定在舞臺上。這是爲了確保您不會刪除任何可能動態實例化的項目。我所做的是我將現有的代碼放在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); 
       } 
      } 
     } 
    } 
} 

正如我提到的,我不能把所有的功勞,是因爲劇本的原始開發商做了大部分繁重的這個命令的。在包含原始代碼的FUEL頁面中,似乎Julian Dolce負責這項工作。原始碼的許可證是MIT許可證(MIT)。

您可以從上面的代碼複製到一個新的JSFL文件並將其保存在您的命令文件夾或從下面的鏈接下載該文件JSFL並將其放置在你的命令的文件夾。

Download: Remove Unused Library Symbols.jsfl

我希望幫助。

0

選擇未使用的庫項目 - 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');