2010-07-02 81 views
0

我正在寻找一个JSFL功能,可以选择一个机架上的所有项目,并删除匹配特定的颜色,例如,所有的笔画#0000FFJSFL:删除所有匹配特定颜色的笔画?

基本上我用红铅笔划会让很多便笺和铅笔工具。但是,当我完成时,我只想告诉闪光灯从屏幕上删除所有红色的斯托克斯,并保持一切完好无损。任何解决方案?

回答

1

好问题!

查看JSFL文档中的Document对象,我发现检索Stroke的唯一方法是通过document.getCustomStroke(),这很烦人。理想情况下,图形对象将存储笔触和填充信息,但它并不:(

我尝试使用数组来控制选择:

var doc = fl.getDocumentDOM(); 
doc.selectAll(); 
var s = new Array().concat(doc.selection); 
var sl = s.length; 
doc.selectNone(); 

for(var i = 0; i < sl ; i++){ 
    doc.selection = s[i]; 
    stroke = doc.getCustomStroke('selection') 
    fl.trace(stroke.color) 
} 

这并不工作

然后我试图选择使用

doc.mouseClick({x:s[i].x, y:s[i].y}, false, false); 

每个对象,但是这不是非常有帮助的笔记可以采取任何形状, 所以点击在音符的顶级左C orner可能会错过 选择。循环遍历每个像素只是为了得到一个选择将不起作用。

简答题并不是因为检索笔触颜色 的唯一方法是通过文档选择。

有一些解决方法,但:

  1. 在IDE中,使用查找和替换,选择而不是文本 颜色,并用透明的东西取代您的笔记本色。不幸的是 这不是一个很好的解决方案。它只会隐藏笔记,而不会删除它们。 flash find and replace http://www.sonic.net/mnitepub/pccafe/reviews/macromedia_flash_mx2004/find_and_replace.gif

  2. 使它轻松地从JSFL调:将所有的音符在当前 时间表一层,并给它一个名字暗示,说“_notes”,然后就 删除该层。

例如,

var doc = fl.getDocumentDOM(); 
if(!doc) alert('Pardon me! There is no document open to work with.'); 

fl.trace(deleteLayerByName('_notes')) 

/*Returns true if the layer was found and deleted, otherwise returns false*/ 
function deleteLayerByName(name){ 
    var timeline = doc.getTimeline(); 
    var frame  = timeline.currentFrame; 
    var layers = timeline.layers; 
    var layersNum = layers.length; 
    for(var i = 0 ; i < layersNum; i++){ 
     if(layers[i].name == name){ 
      timeline.deleteLayer(i) 
      return true; 
     } 
    } 
    return false; 
} 

希望有人可以提供一个很好的黑客在jsfl中按颜色选择对象。有相当多的东西,你可以在IDE中这样做,但can't do them from JSFL :(

HTH

+0

呀,好像它应该是一个非常基本的操作,而是人,它只是似乎并不可能基于n的能力jsfl本身。 – Ibis 2010-07-08 00:19:29

+0

@Ibis jsfl有时会很烦人。很高兴看到flashfilmmaker.com网站活着并踢btw :) – 2010-07-08 09:29:24