Frage

Ich schreibe ein Skript alle dynamischen Textfelder in der Bibliothek einer Flash-Datei (FLA) für den Zugriff auf und bettet bestimmte Zeichensätze.

ich durchlaufen alle Objekte für Textfelder suchen, aber es scheint, dass es einige Probleme gibt, wenn sie versuchen die Mitglieder einer Gruppe Objekt zuzugreifen. Es macht Kinder in der Flash-Datei hat, aber ich kann keinen Weg sehen, um sie von dem Objekt in dem CS3 Referenz für JSFL . Gruppe verfügt über eine nicht dokumentierte Schicht Eigentum, unter anderem, aber es scheint nur eine Referenz auf sich selbst enthalten.

Die CS4 Referenz definiert eine Mitglieder Eigenschaft für das Gruppenobjekt.

Also meine Fragen ist, wie es die Kinder eines Gruppenobjekts in Flash C3 JSFL Skript-API zugreifen kann?

War es hilfreich?

Lösung

Just Gruppierung aufheben () die Formen zuerst. Dann können Sie Ihre normale „Text“ Umwandlung danach laufen. Es sollte das Dokument nicht verletzt, weil Gruppierung keine wirklichen technischen Auswirkungen hat.

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

Andere Tipps

Shape-Objekte haben keine Kinder. Also, wenn Sie über ein Shape-Objekt in Ihrer Rekursion kommen dann spielt es keine dynamischen texfields Inneren (oder Flash-Objekte im Inneren als Kinder für diese Angelegenheit)

Was könnte verwirrend Sie denkt, dass Objekte auf der Bühne Gruppierung eine Form bildet, ist es nicht. Die „Gruppen“ von Objekten auf der Bühne gibt es nur im Flash-Editing-Oberfläche für die einfache Bearbeitung und Workflow. Sobald Sie veröffentlichen sie sind nicht wirklich in der swf / Actionscript gruppiert.

Was ist noch verwirrend sein kann, ist, dass, wenn Sie mehr Vektor-Elemente auf der Bühne, oder sogar in einigen Situationen Bitmap-Elementen auf der Bühne, Blitz wird sie nur vereinfachen, abgeflacht zu einem einzigen Shape-Objekt. Dies fördert die Illusion, dass mit jeder als Kind Objekte erstellt ein Shape-Objekt Gruppierung und damit, dass ein Shape-Objekt könnte Kinder haben, aber in Wirklichkeit alle es taten, war es alles in einer einzigen Form mit den Grafiken auf sie flach gezeichnet abflachen, es hält keine von ihnen als einzelne Objekte. Und diese Situation nie mit einem dynamischen Textfeld geschieht, so ganz einfach, wenn Sie ein Shape-Objekt treffen, dann gibt es kein dynamisches Textfeld gibt, bewegen sich auf:)

Sind Sie sicher, dass Sie die Arbeit mit Formen? Eine Form sollte nicht beiseite haben der Lage sein, alle tatsächlichen Kinder von Grafiken (es hat eine Eigenschaft graphics, wie Sprite), die nicht wirklich als Kinder zählen. Sie sind eher wie ein Wert der Eigenschaft graphics.

Form erstreckt sich nicht Display, so dass ich bin mir ziemlich sicher, dass es nicht untergeordnete Anzeigeobjekte wie ein Sprite oder Movieclip zum Beispiel haben.

Sie sollten sicher sein, das Überspringen diejenigen wenn für Textfelder zu suchen.

Sie haben auf die Antwort bereits angedeutet, selbst: Verwenden Sie die Mitglieder Eigenschaft auf die Form-Objekte. Es gibt ein Array von Objekten innerhalb enthalten, die nicht Textobjekte sein können.

Sie haben nicht angeben, ob Sie fl.findObjectInDocByType () verwenden, um das Dokument für Textobjekte und Form (potentielle Gruppen) zu scannen, aber das wäre auch eine gute Idee zu sein.

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

Ich glaube, das folgende Skript den Textwert aller dynamischen Textfelder in einer FLA wird verfolgen, es sei denn es einige böse verschachtelten Fall ist, die ich verpasst. In jedem Fall sollte es hoffentlich erhalten Sie gehen. Seien Sie vorsichtig bei, dass Sie benötigen das Skript aus dem Menü Befehle, um fl.findObjectInDocByType () nicht zu werfen, um einen Fehler zu laufen. Die Kommentare in den oberen Link für weitere Informationen.

// 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());
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top