ActionScript 2、ネストされたムービークリップのリスト
-
20-08-2019 - |
質問
Flash 8、AS 2 の指定された停止 (および現在の) フレームでステージ上にあるすべてのムービークリップ (ネストされたムービークリップも含む) のリストを取得しようとした人はいますか?
私は次のことを行いました:
for(i in _root){
if(typeof(_root[i])=="movieclip"){
trace(_root[i]);}
}
ただし、これは第 1 レベルの検索には適しています。つまり、ムービークリップ内に他のムービークリップがある場合、それらにはアクセスできません。さらに、ムービークリップ内に複数のムービークリップを含めることができます。
私がやろうとしていることを誰かがやろうとしたことがありますか?
さよなら!
解決
ただ追跡したいだけですか?もしそうなら、これを実行できる ObjectDumper と呼ばれる、文書化されていない便利なユーティリティがあります。
したがって、できることは次のとおりです。
import mx.data.binding.ObjectDumper;
trace(ObjectDumper.toString(_root));
そこには多くの追加機能 (関数、変数など) が含まれる可能性があるため、使用できる追加パラメーターがあります。
ObjectDumper.toString(obj, showFunctions, showUndefined, showXMLstructures, maxLineLength, indent)
他のヒント
inkedmnによって提案されたとおりに
それは、微量であり、よりMCSのためにそれの内部かどうかをチェックすることが見つかった値は、次に、MCであるかどうかを確認するために、printStuff最初のチェック
printStuff = function(object){
for(var x in object){
if(typeof(object[x])=="movieclip"){
trace(object[x]);
printStuff(object[x]);
}
}
}
printStuff(_root);
ああ....後半年間、いくつか変更されて申し訳ありません...
あなたは、MovieClipクラスに機能を追加することによって、そのような何かを行うことができます:
MovieClip.prototype.StopEverything = function()
{
stop();
for (var i in this) {
if (typeof(this[i]) == "movieclip") {
this[i].StopEverything();
}
}
}
ASSetPropFlags(MovieClip.prototype, ["StopEverything"], 1);
最後のビットASSetPropFlagsが何かであることを私はStopEverythingは、フィールド毎にも隠されたプロパティやアイテムをこのfor..in使用してムービークリップのような組み込みクラスを反復処理することができました。 ASSetPropFlagsがなければ、StopEverything()は、すべて含まれているムービークリップにヒットしない場合があります。
私のAS2の経験はかなり限られている(私はAS3のビットをやった)が、ここに行きます:
あなたはそれがムービークリップが発生した場合、他のムービークリップの子オブジェクトをだことのすべてに目を通すだろう再帰関数(それが見つかったムービークリップのために同じことをしていた、など)を書いた場合は?関数は、オブジェクトパラメータ、ならびに各パス上に追加され、「見つかった」クリップのアレイを取ることができる。
私は、私がAS2の男のあまりないんだけど(私が言ったように)私はこれを行うだろうコードを書くが、ことがしたい:\
私は今日はこれに非常に似て何かをしました。 1つのムービークリップの複製ナビゲーションの一部とした私のクリップ。私がいたどのように多くを見つけるためにムービークリップのアクションにより、最大インクリメントされたメインステージで変数を置きます。私は自分のナビゲーションにインタラクティビティを埋めるためにループを使用し、その後、すべてのクリップがのアカウントたまで待つ間隔を設定します。あまりにもかなりうまく動作します。これは誰かに役立ちます願っています。
それはとんでもない欠陥であるオブジェクトのルートレベルでのNameValueのペアを無視するため、ルートにムービークリップを列挙しませんAS2.0文書化されていないObjectDumper機能がある理由は、仲間の非常に定義するので、(控えめに言って)配列は、それのルートでNAMEVALUEのペアで構成され、配列/オブジェクトです。
例:トレース(ObjectDumper.toString({がmyName: "myValue"}))//出力= ""。不思議は彼らが文書化されていない、この「機能」を残しませんでした。率直に言って、私はそれが簡単かつ確実AS2やAS3のいずれかにデバッグ目的のオブジェクトのすべての内容を列挙する組み込みの方法はありません驚くべきことだと思います。あなたがネットを検索する場合は、あなたが見つけるすべてのためのハックの仕事ではない...のみのアレイのルートを見てループに...再帰何ます。