Question

J'écris un script pour accéder à tous les champs de texte dynamiques dans la bibliothèque d'un fichier flash (fla) et embed certains jeux de caractères.

J'itérer tous les objets qui cherchent textfields, mais il semble qu'il ya quelques problèmes lorsque vous essayez d'accéder à des membres d'un objet groupe. Il ne les enfants dans le fichier flash, mais je ne vois aucun moyen d'y accéder à partir de l'objet groupe défini dans la section référence CS3 pour JSFL . Groupe dispose d'un sans papier couche propriété, entre autres, mais il semble ne contenir qu'une référence à lui-même.

Le de référence CS4 définit membres propriétés de l'objet groupe.

Alors mes questions est, comment il accéder aux enfants d'un objet Groupe dans l'API script C3 Flash?

Était-ce utile?

La solution

Juste Dissocier () les formes premières. Ensuite, vous pouvez exécuter votre conversion normale « texte » par la suite. Il ne devrait pas nuire à ce document parce que le regroupement n'a pas d'implications techniques réelles.

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

Autres conseils

Les objets de forme ne sont pas des enfants. Donc, si vous tombez sur un objet de forme dans votre récursion il n'a pas de texfields dynamique à l'intérieur (ou des objets flash à l'intérieur comme les enfants pour cette question)

Qu'est-ce que pourrait être source de confusion, vous pense que le regroupement d'objets sur scène fait une forme, il ne fonctionne pas. Les « groupes » d'objets sur scène existe uniquement dans l'interface d'édition flash pour l'édition et flux de travail facile. Une fois que vous publiez, ils ne sont pas réellement regroupés dans le swf / actionscript.

Ce qui peut même être plus déroutant est que lorsque vous avez plusieurs éléments vectoriels sur scène, ou même dans certains éléments bitmap de situations sur scène, Flash simplement les simplifier, aplati à un seul objet Shape. Cela favorise l'illusion que les objets regroupement crée un objet de forme avec chacun comme un enfant, et donc qu'un objet de forme pourrait avoir des enfants, mais en réalité, tout ce qu'il a fait était l'aplatir tout en une seule forme avec les graphiques dessinés à plat sur celui-ci, il ne détient aucun d'entre eux comme des objets individuels. Et cette situation ne se produit jamais avec un textfield dynamique, donc tout simplement, si vous touchez un objet de forme alors il n'y a pas là textfield dynamique, passez:)

Êtes-vous sûr que vous travaillez avec des formes? Une forme ne devrait pas être en mesure d'avoir des enfants en dehors de réels graphiques (il a une propriété graphique, comme Sprite), qui ne comptent pas vraiment comme des enfants. Ils sont plus comme une valeur de la propriété graphique.

forme ne va pas DisplayObjectContainer, donc je suis sûr qu'il ne peut pas avoir des objets d'affichage enfant comme un Sprite ou MovieClip par exemple.

Vous devriez être sûr sauter ceux si la recherche de TextField.

Vous avez fait allusion à la réponse déjà vous: utilisez la propriété membres sur les objets de forme. Elle retourne un tableau d'objets contenus dans, qui peuvent ou peuvent ne pas être des objets de texte.

Vous n'avez pas spécifié si vous utilisez fl.findObjectInDocByType () pour numériser le document pour les objets texte et la forme (groupes potentiels), mais ce serait une bonne idée aussi.

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

Je crois que le script suivant retracera la valeur de texte de tous les champs de texte dynamique dans un FLA moins il y a certains cas, imbriqué méchant que je manqué. Dans tous les cas, il devrait, espérons-vous aller. Méfiez-vous de ce que vous devez exécuter le script à partir du menu Commandes pour que fl.findObjectInDocByType () ne pas jeter une erreur. Voir les commentaires dans le lien ci-dessus pour plus d'informations.

// 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());
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top