선택한 프레임에서 지정된 색상과 일치하는 모든 윤곽 채우기를 대체 할 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);
}
}