2014-06-05 5 views
2

선택한 프레임에서 지정된 색상과 일치하는 모든 윤곽 채우기를 대체 할 JSFL 스크립트를 작성하려고합니다.JSFL에서 채우기 색 바꾸기

내 문제는 JSFL 문서에서 지정한대로 shape.beginEdit() 및 shape.endEdit()을 호출하면 윤곽선의 채우기 특성에 액세스 할 때마다 스크립트가 충돌한다는 것입니다 (읽기 전용 액세스도 포함). 오류 메시지는 "다음 자바 스크립트 오류가 발생했습니다 :"이며 추가 정보가 없습니다.

shape.begin/endEdit() 호출을 생략하면 스크립트가 중단되지 않지만 색상이 실제로 업데이트되지 않습니다.

Flash CS5.5, CS6 및 CC에서이 스크립트를 실행 해 보았는데 동일한 결과가 나타납니다.

누락 된 부분을 지적 해 주시면 감사하겠습니다.

스크립트 : 그냥이 같은

var replaceFills = { 
    '#ff0000': '#33cccc', 
    '#33cccc': '#ff0000', 
    '#66ff00': '#00ffff', 
    '#00ffff': '#66ff00', 

    '#2173a6': '#ff00ff', 
    '#ff00ff': '#2173a6', 

    '#195480': '#ff00ff', 
    '#ff00ff': '#195480', 
}; 

function recolor(element) { 
    if (element.elementType == "shape") { 
     element.beginEdit(); 

     for (var j = 0; j < element.contours.length; j++) { 
      var c = element.contours[j]; 
      if (c.interior && c.fill) { 
       if (c.fill.style == 'solid') { 
        if (c.fill.color in replaceFills) { 
         c.fill.color = replaceFills[c.fill.color]; 
        } 
       } 
      } 
     } 
     element.endEdit(); 
    } 
} 

function recolorFrame(frame) { 
    var elements = frame.elements; 
    for (var i = 0; i < elements.length; i++) 
     recolor(elements[i]); 
} 


var curSelected = fl.getDocumentDOM().getTimeline().getSelectedFrames(); 

for (var i = 0; i < curSelected.length; i += 3) { 
    var layerIndex = curSelected[i]; 
    var startIndex = curSelected[i + 1]; 
    var endIndex = curSelected[i + 2]; 

    var layer = fl.getDocumentDOM().getTimeline().layers[layerIndex]; 

    for (var j = startIndex; j < endIndex; j++) { 
     var frame = layer.frames[j]; 
     if (j == frame.startFrame) 
      recolorFrame(frame); 
    } 
} 

답변

2

편집을 yor 기능 :

function recolor(element) { 
if (element.elementType == "shape") { 
//del element.beginEdit(); 

    for (var j = 0; j < element.contours.length; j++) { 
     var c = element.contours[j]; 
     if (c.interior && c.fill) { 
      if (c.fill.style == 'solid') { 
       if (c.fill.color in replaceFills) { 
//del     c.fill.color = replaceFills[c.fill.color]; 
//add this 
         var fill = element.getCustomFill(); 
         fill.style = "solid"; 
         fill.color = replaceFills[c.fill.color]; 
         element.setCustomFill(fill); 
//end 
        } 
       } 
      } 
     } 
//del element.endEdit(); 
    } 
    } 
0

FWIW가, 하나는 Edit 아래에있는 Find & Replace 패널을 사용하여 색상을 교체 할 수 있습니다.