문제

플래시 라이브러리 (FLA) 파일의 모든 동적 텍스트 필드에 액세스하고 특정 문자 세트를 포함하기 위해 스크립트를 작성하고 있습니다.

텍스트 필드를 찾는 모든 개체를 반복하지만 그룹 객체의 구성원에 액세스하려고 할 때 몇 가지 문제가있는 것 같습니다. 플래시 파일에 어린이가 있지만 JSFL에 대한 CS3 참조. 그룹에는 서류 미비가 있습니다 재산은 무엇보다도 그 자체에 대한 언급 만 포함하는 것 같습니다.

그만큼 CS4 참조 정의 a 회원 그룹 객체에 대한 속성.

그래서 내 질문은 Flash C3 JSFL 스크립트 API에서 그룹 객체의 어린이에게 어떻게 액세스합니까?

도움이 되었습니까?

해결책

그냥 ungroup () 모양을 먼저. 그런 다음 나중에 일반 "텍스트"변환을 실행할 수 있습니다. 그룹화에는 실제 기술적 영향이 없기 때문에 문서를 해치지 않아야합니다.

var doc = fl.getDocumentDOM();
var results = fl.findObjectInDocByType("shape", doc);
for (var i = 0; i < results.length; i++) 
{
    if ( results[i].obj.isGroup )
    {
        doc.selection = [results[i].obj];
        doc.unGroup();
    }
}

다른 팁

모양 대상에는 자녀가 없습니다. 따라서 재귀에서 모양 객체를 만나면 그 안에는 역동적 인 Texfields가 없습니다 (또는 그 내부에 그 내부에 그 내부에 플래시 물체가 그 문제에 대한 플래시 객체)가 없습니다.

혼란 스러울 수있는 것은 무대에서 객체를 그룹화하는 것이 모양을 만든다고 생각하고 있습니다. 스테이지의 객체의 "그룹"은 쉽게 편집하고 워크 플로우를 위해 플래시 편집 인터페이스에만 존재합니다. 일단 게시하면 실제로 SWF/ActionScript에서 그룹화되지 않습니다.

더 혼란 스러울 수있는 것은 무대에 여러 벡터 항목이 있거나 일부 상황에서도 무대에 비트 맵 항목이있을 때 플래시가 단순화되어 단일 모양 객체로 평평하게된다는 것입니다. 이것은 그룹화 객체가 각각의 아이처럼 모양 대상을 생성한다는 환상을 더욱 발전 시켜서, 형태 객체는 아이를 가질 수 있지만 실제로는 그 그래픽이 그 그래픽을 평평하게 그려서 하나의 단일 모양으로 평평하게 만들었습니다. 그것은 그들 중 어느 것도 개별 객체로 유지하지 않습니다. 그리고 그 상황은 동적 텍스트 필드에서는 결코 일어나지 않습니다. 그래서 간단히 말해서, 당신이 모양 객체를 쳤다면, 동적 텍스트 필드가없고, 계속 진행하십시오 :)

모양으로 일하고 있다고 확신하고 있습니까? 모양은 그래픽 외에 실제 어린이를 가질 수 없어야합니다 (스프라이트와 같은 그래픽 속성이있는). 실제로 어린이로 간주되지 않습니다. 그것들은 그래픽 속성의 가치와 비슷합니다.

Shape는 DisplayObjectContainer를 확장하지 않으므로 Sprite 또는 MovieClip과 같은 하위 디스플레이 객체를 가질 수는 없습니다.

TextFields를 검색하는 경우 안전하게 건너 뛸 수 있어야합니다.

당신은 이미 대답을 당신 자신의 대답에 암시했습니다. 모양 객체의 멤버 속성을 사용하십시오. 텍스트 개체가 될 수도 있고 아닐 수도있는 내부에 포함 된 객체 배열을 반환합니다.

fl.findobjectindocbytype ()를 사용하여 텍스트 개체 및 모양 (잠재적 그룹)에 대한 문서를 스캔하는지 여부를 지정하지는 않았지만 좋은 생각입니다.

http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=livedocs_parts&file=00004151.html

다음 스크립트는 내가 놓친 불쾌한 중첩 케이스가 없다면 FLA에서 모든 동적 텍스트 필드의 텍스트 값을 추적 할 것이라고 생각합니다. 어쨌든, 그것은 당신을 갈 수 있기를 바랍니다. fl.findobjectindocbytype ()에 오류를 던지지 않으려면 명령 메뉴에서 스크립트를 실행해야한다는 점에주의하십시오. 자세한 내용은 위의 링크의 의견을 참조하십시오.

// Look for text objects
var doc = fl.getDocumentDOM();
var typeToSearchFor = "text";
var results = fl.findObjectInDocByType(typeToSearchFor, doc);

for(var i = 0; i < results.length; i++)
{
    if(results[i].obj.textType == "dynamic")
    {
        doWhatever(results[i].obj);
    }
}

// Look for shapes
typeToSearchFor = "shape";
results = fl.findObjectInDocByType(typeToSearchFor, doc);

var textObjects;

for(var i = 0; i < results.length; i++)
{
    var members = results[i].obj.members;

    for(var j = 0; j < members.length; j++)
    {
        if(members[j].elementType == "text" && members[j].textType == "dynamic")
        {
            doWhatever(members[j]);
        }
    }
}


function doWhatever(textObj)
{
    fl.trace(textObj.getTextString());
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top