0

actionscript 2を使用して、Flashムービー内の名前を持つすべてのインスタンスのリストを取得することは可能ですか.すべての名前付きテキスト領域、またはすべてのmovieClipインスタンスなどを含む配列のように.デザイナーがテキストを追加または削除できるようにこれを取得したいと思います.エリアなどであり、actionscript はこれらを動的に見つけて、別のデータソースからテキストを取得できます。

私が欲しいのは、DOM ツリーのようなものか、JavaScript で getElementByName() がどのように機能するかのようなものだと思います。また、インスタンス名の文字列値も取得するので、xml でテキスト値を見つけることができます。

デザイナーが「著作権」という名前の新しいテキスト領域を追加すると、私のコードは (スクリプトを変更する必要なく) XML ファイル内に「著作権」という ID を持つデータがあればそれを見つけ、値を追加する必要があります。テキストエリア。

4

3 に答える 3

2

@Stein Gauslaa Strindhaug

これはかなり大雑把ですが、うまくいくはずです。

private function traceAllChildren(rootContainer:DisplayObjectContainer):void {
    for(var i=0; i < rootContainer.numChildren; i++) {
        var item:* = rootContainer.getChildAt(i);
        try {
            traceAllChildren(item);
        } catch (e:Error) {
            trace(e.toString());
        }
        trace(item.toString());
        // This is the block where you can affect
        // an 'item' depending on it's type, name, etc..
        // eg: 
        //      if (item.toString() == '[object TextField]') {
        //          item.text = "The text I want to insert";
        //      }
        // or
        //      if (item.name == myTextFieldNameVar) {
        //          item.text = "The text I want to insert";
        //      }
    }
}

次に、traceAllChildren(this) または traceAllChildren(myParentMovieClip) のように呼び出します。

これがお役に立てば幸いです、頑張ってください!

于 2008-11-23T19:06:05.903 に答える
1

簡単な答え: これを行う「組み込み」の方法はありません。getElementByName() に似た機能を探し出すこともできますが_root、コンテンツから開始してスパイダーする必要があります。厳密に言えば、ムービー クリップはその子への参照で開始されますが、実行時に削除される可能性があるため、失敗する可能性があります。 .

そうは言っても、これは一般的な問題であり、多くのアプローチがあります。カスタム クラスにアタッチされたカスタム コンポーネント ("TextPlaceholder" など) を作成し、デザイナーに動的テキストが必要な場所にそのコピーを配置させると、より便利なことがあります。次に、実行時に、このコンポーネントはそのプロパティまたは他のカスタム コンポーネント パラメータを調べ、_nameそれらに基づいて、適切なサイズ、コンテンツなどのテキスト フィールドを作成できます。それはそれに近づくための1つの方法にすぎません。

于 2008-11-19T03:23:33.747 に答える
0

AS2 コーディングを行ってからしばらく経ちましたが、おそらく MovieClip.getInstanceAtDepth() と this.getNextHighestDepth() の組み合わせを使用して、ムービーの最高深度を見つけ、getInstanceAtDepth( ) は、新しいデータを入力しようとしているクリップに対応します。

AS2 のドキュメントにあるこのサンプル コードにも気付きました。

次のコードは、ステージ上のすべてのムービー クリップ インスタンスの深さをトレースします。

for (var i in this) {
    if (typeof (this[i]) == "movieclip") {
    trace("movie clip '"+this[i]._name+"' is at depth "+this[i].getDepth());
    }
}

PS: おそらくこれを聞きたくないのはわかっていますが、AS3 では this.children を繰り返し処理できるので面倒です!

于 2008-11-18T17:56:45.500 に答える