3

フラッシュ (fla) ファイルのライブラリにあるすべての動的テキスト フィールドにアクセスし、特定の文字セットを埋め込むスクリプトを作成しています。

テキストフィールドを探してすべてのオブジェクトを反復処理しますが、グループ オブジェクトのメンバーにアクセスしようとすると、いくつかの問題があるようです。フラッシュ ファイルには子が含まれていますが、 CS3 の jsfl リファレンスで定義されている Group オブジェクトからそれらにアクセスする方法がわかりません。グループには文書化されていない レイヤープロパティがありますが、それ自体への参照のみが含まれているようです。

CS4 リファレンスでは、Group オブジェクトの members プロパティが定義れています。

私の質問は、Flash C3 jsfl スクリプト API で Group オブジェクトの子にどのようにアクセスするのですか?

4

4 に答える 4

1

シェイプオブジェクトには子がありません。したがって、再帰でShapeオブジェクトに遭遇した場合、そのオブジェクト内には動的なtexfieldがありません(または、その中に子としてオブジェクトをフラッシュします)。

混乱するかもしれないのは、ステージ上でオブジェクトをグループ化するとシェイプが作成されると考えていることですが、そうではありません。ステージ上のオブジェクトの「グループ」は、簡単な編集とワークフローのためにフラッシュ編集インターフェースにのみ存在します。公開すると、実際にはswf/actionscriptにグループ化されません。

さらに紛らわしいのは、ステージ上に複数のベクターアイテムがある場合、または場合によってはステージ上にビットマップアイテムがある場合でも、Flashはそれらを単純化し、単一のShapeオブジェクトにフラット化することです。これにより、オブジェクトをグループ化すると、それぞれが子としてShapeオブジェクトが作成され、Shapeオブジェクトが子を持つことができるという幻想がさらに高まりますが、実際には、すべてのオブジェクトを1つのShapeに平坦化し、それらのグラフィックをフラットに描画します。それらのいずれも個別のオブジェクトとして保持しません。そして、そのような状況は動的テキストフィールドでは決して起こらないので、非常に簡単に言えば、Shapeオブジェクトをヒットした場合、そこに動的テキストフィールドはありません。次に進んでください:)

于 2009-04-14T02:18:14.790 に答える
1

最初に形状を unGroup() するだけです。その後、通常の「テキスト」変換を後で実行できます。グループ化は実際には技術的な意味を持たないため、ドキュメントを傷つけることはありません。

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();
    }
}
于 2009-06-17T00:58:57.200 に答える
0

Shapesを使用してよろしいですか?シェイプには、実際には子としてカウントされないグラフィック(スプライトなどのグラフィックプロパティがあります)以外に、実際の子を含めることはできません。それらは、グラフィックスプロパティの値のようなものです。

ShapeはDisplayObjectContainerを拡張しないため、たとえばSpriteやMovieClipなどの子表示オブジェクトを含めることはできないと確信しています。

TextFieldsを検索する場合は、これらをスキップしても安全です。

于 2009-04-08T03:57:12.383 に答える
0

あなたはすでに答えを自分でほのめかしています: 形状オブジェクトで members プロパティを使用してください。含まれているオブジェクトの配列を返します。これは、テキスト オブジェクトである場合とそうでない場合があります。

fl.findObjectInDocByType() を使用してテキスト オブジェクトと形状 (潜在的なグループ) のドキュメントをスキャンするかどうかを指定しませんでしたが、それも良い考えです。

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

次のスクリプトは、私が見落とした厄介なネストされたケースがない限り、FLA 内のすべての動的テキスト フィールドのテキスト値をトレースすると思います。いずれにせよ、うまくいけば、うまくいくはずです。fl.findObjectInDocByType() がエラーをスローしないようにするには、[コマンド] メニューからスクリプトを実行する必要があることに注意してください。詳細については、上記のリンクのコメントを参照してください。

// 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());
}
于 2009-04-16T00:47:35.553 に答える