Domanda

Sto scrivendo uno script per accedere a tutti i campi di testo dinamici nella libreria di un file Flash (FLA) e incorporare alcuni set di caratteri.

I scorrere tutti gli oggetti alla ricerca di campi di testo, ma sembra che ci sono alcuni problemi quando si cerca di accedere ai membri di un oggetto gruppo. Non ha figli nel file Flash, ma posso vedere alcun modo per accedervi dall'oggetto gruppo definito nel di riferimento CS3 per JSFL . Gruppo ha una non documentata strato di proprietà, tra gli altri, ma sembra contenere solo un riferimento a se stesso.

Il riferimento CS4 definisce una membri di proprietà per l'oggetto di gruppo.

Quindi le mie domande sono, come l'accesso ai figli di un oggetto Gruppo in Flash C3 JSFL API sceneggiatura?

È stato utile?

Soluzione

Proprio Separa () le forme prime. Quindi è possibile eseguire il normale conversione "testo" in seguito. Non dovrebbe danneggiare il documento perché raggruppamento non ci sono reali implicazioni tecniche.

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

Altri suggerimenti

Gli oggetti forma non hanno figli. Quindi, se vi imbattete in un oggetto di forma nel ricorsione allora non ha nessun texfields dinamiche all'interno di esso (o oggetti flash al suo interno come i bambini per quella materia)

Quello che potrebbe essere fonte di confusione che si sta pensando che il raggruppamento degli oggetti in scena fa una forma, non. I "gruppi" di oggetti in scena esiste solo nell'interfaccia di modifica del flash per un facile montaggio e workflow. Una volta che si pubblica non sono in realtà raggruppati nella swf / ActionScript.

Ciò che può anche essere più confusa è che quando si dispone di più elementi vettoriali sul palco, o anche in alcune voci situazioni bitmap sul palco, Flash sarà solo li semplificare, appiattita ad un singolo oggetto Shape. Questo favorisce l'illusione che il raggruppamento degli oggetti crea un oggetto Shape con ognuno come un bambino, e quindi che un oggetto Shape poteva avere figli, ma in realtà tutto quello che ha fatto è stato appiattire il tutto in una singola forma con quegli grafica disegnata piatta su di esso, non tiene qualunque di loro come singoli oggetti. E questa situazione non succede mai con un campo di testo dinamico, per cui molto semplicemente, se si colpisce un oggetto Shape poi c'è non è un campo di testo dinamico lì, andare avanti:)

Sei sicuro che si sta lavorando con forme? Una forma non dovrebbe essere in grado di avere figli effettivi a parte grafica (ha una proprietà graphics, come Sprite), che in realtà non contano come i bambini. Sono più come un valore della proprietà grafica.

Forma non si estende DisplayObjectContainer, quindi sono abbastanza sicuro che non può avere oggetti di visualizzazione secondari come una Sprite o MovieClip per esempio.

Si dovrebbe essere sicuri di saltare quelli se cercasse TextFields.

Hai accennato alla risposta già da soli: utilizzare la proprietà membri sugli oggetti di forma. Restituisce un array di oggetti contenuti all'interno, che possono o non possono essere oggetti di testo.

Non ha specificato se si utilizza fl.findObjectInDocByType () per acquisire il documento per gli oggetti di testo e la forma (potenziali gruppi), ma che sarebbe una buona idea pure.

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

Credo che il seguente script traccerà il valore di testo di tutti i campi di testo dinamici in un FLA a meno che non ci sia qualche caso nidificato brutto che ho perso. In ogni caso, si spera, dovrebbe farti andare. Diffidare di che è necessario eseguire lo script dal menu Comandi in ordine per fl.findObjectInDocByType () non genera un errore. Vedere i commenti nel link qui sotto per maggiori informazioni.

// 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());
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top