Pergunta

Eu estou escrevendo um script para acessar todos os campos dinâmicos na biblioteca de um arquivo Flash (FLA) e incorporar certos conjuntos de caracteres.

Eu percorrer todos os objetos que procuram textfields, mas parece que há alguns problemas ao tentar acessar membros de um objeto grupo. Ele tem filhos no arquivo flash, mas eu posso ver nenhuma maneira de acessá-los a partir do objeto Grupo definido no referência CS3 para jsfl . Grupo tem uma situação irregular camada propriedade, entre outros, mas parece conter apenas uma referência a si mesmo.

A referência CS4 define um membros propriedade para o objeto Grupo.

Então, minhas perguntas é: como ele acessar os filhos de um objeto Grupo in Flash C3 jsfl API script?

Foi útil?

Solução

Apenas Desagrupar () As formas em primeiro lugar. Em seguida, você pode executar sua conversão normal "texto" depois. Ele não deve ferir o documento porque o agrupamento não tem implicações técnicas reais.

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();
    }
}

Outras dicas

objetos

Forma não tem filhos. Então, se você se deparar com um objeto Shape em sua recursividade, então ele não tem nenhum texfields dinâmicas dentro dele (ou flash de objetos dentro dela como filhos para que o assunto)

O que pode ser confuso você está pensando que o agrupamento objetos no palco faz uma forma, isso não acontece. Os "grupos" de objetos no palco só existe na interface de edição de flash para fácil edição e fluxo de trabalho. Uma vez que você publicar eles não estão realmente agrupados no swf / ActionScript.

O que pode ser ainda mais confuso é que quando você tem vários itens vetor no palco, ou até mesmo em algumas situações bitmap itens no palco, o Flash só vai simplificá-los, achatada para um único objeto Shape. Isso reforça a ilusão de que agrupar objetos cria um objeto Shape com cada um como uma criança, e, portanto, que um objeto Shape podia ter filhos, mas na realidade tudo o que fez foi achatar tudo em uma única forma com esses gráficos desenhados plana para ele, que não detém qualquer um deles como objetos individuais. E essa situação nunca acontece com um campo de texto dinâmico, de modo bem simples, se você bater em um objeto Shape então não é um campo de texto dinâmico lá, seguir em frente:)

Você tem certeza de que você está trabalhando com formas? Uma forma não deve ser capaz de ter filhos reais, além de gráficos (que tem uma propriedade graphics, como Sprite), que realmente não contam como crianças. Eles são mais como um valor da propriedade gráficos.

Forma não se estende DisplayObjectContainer, então eu tenho certeza que ele não pode ter objetos de exibição filho como um Sprite ou MovieClip por exemplo.

Você deve ser seguro ignorar aqueles se procurasse TextFields.

Você insinuou a resposta já se: usar a propriedade membros sobre os objetos de forma. Ele retorna um array de objetos contidos no interior, o que pode ou não ser objetos de texto.

Você não especificou se você estiver usando fl.findObjectInDocByType () para digitalizar o documento para objetos de texto e forma (grupos potenciais), mas que seria uma boa idéia também.

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

Eu acredito o seguinte script irá traçar o valor de texto de todos os campos de texto dinâmico em um FLA a menos que haja algum caso aninhada desagradável que eu perdi. Em qualquer caso, deve espero que você ir. Seja cauteloso com o que você precisa para executar o script no menu Comandos para que fl.findObjectInDocByType () não lançar um erro. Veja os comentários no link acima para mais informações.

// 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());
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top