Pregunta

Estoy escribiendo un guión para acceder a todos los campos de texto dinámicos en la biblioteca de un archivo Flash (FLA) e incrustar ciertos juegos de caracteres.

iterar a través de todos los objetos en busca de campos de texto, pero parece que hay algunos problemas al intentar acceder a los miembros de un grupo de objetos. Se tiene niños en el archivo flash, pero puedo ver que no hay manera de acceder a ellos desde el objeto Grupo definido en el referencia CS3 para JSFL . Grupo tiene un capa indocumentado propiedad, entre otros, pero parece contener sólo una referencia a sí mismo.

El referencia CS4 define un miembros de propiedades del objeto de grupo.

Así que mi pregunta es, ¿cómo se accede a los hijos de un objeto Grupo Flash C3 JSFL API guión?

¿Fue útil?

Solución

Sólo desagrupar () las formas primeras. A continuación, puede ejecutar su conversión normal "texto" después. No debe perjudicar a la agrupación documento porque no tiene implicaciones técnicas reales.

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

Otros consejos

Los objetos Shape no tienen hijos. Así que si se encuentra con un objeto Shape en su recursividad entonces no tiene ningún texfields dinámicos en su interior (o en su interior objetos flash como los niños, para el caso)

¿Cuál podría ser confuso que está pensando que la agrupación de objetos en el escenario hace que una forma, no. Los "grupos" de los objetos en el escenario sólo existe en la interfaz de edición de Flash para facilitar la edición y flujo de trabajo. Una vez publicada en realidad no están agrupados en el swf / ActionScript.

Lo que puede ser aún más confuso es que cuando se tiene varios elementos del vector en el escenario, o incluso en algunos artículos situaciones de mapa de bits en el escenario, Flash simplemente simplificarlos, aplanado a un solo objeto Shape. Esto fomenta la ilusión de que la agrupación de objetos crea un objeto Shape con cada uno como un niño, y por lo tanto que un objeto Shape podía tener hijos, pero en realidad todo lo que hizo fue aplanar todo en una sola forma con los gráficos dibujados plana sobre ella, no lleva a cabo ninguna de ellas como objetos individuales. Y esa situación no ocurre con un campo de texto dinámico, por lo que, sencillamente, si se golpea un objeto Shape entonces no es un campo de texto dinámico allí, seguir adelante:)

¿Está seguro que está trabajando con las formas? Una forma no debería ser capaz de tener hijos reales aparte de gráficos (que tiene una propiedad de gráficos, como Sprite), que no cuentan realmente como niños. Son más como un valor de la propiedad graphics.

Forma no se extiende DisplayObjectContainer, así que estoy bastante seguro de que no puede tener objetos de visualización secundarios como una Sprite o MovieClip por ejemplo.

Usted debe ser seguro saltarse esos si la búsqueda de campos de texto.

Usted ha insinuado la respuesta ya ti mismo: utilizar la propiedad de los miembros de los objetos de forma. Se devuelve una matriz de objetos que contiene, que puede o no ser objetos de texto.

No se ha especificado si se está utilizando fl.findObjectInDocByType () para escanear el documento y la forma de los objetos (grupos potenciales) de texto, sino que sería una buena idea también.

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

Creo que la siguiente secuencia de comandos se traza el valor de texto de todos los campos de texto dinámico en un FLA a menos que haya algún caso anidada desagradable que echaba de menos. En cualquier caso, se debe de esperar que te va. Tenga cuidado con los que tiene que ejecutar el script desde el menú de comandos con el fin de fl.findObjectInDocByType () no generará un error. Véanse los comentarios en el siguiente enlace para obtener más información.

// 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top