MovieClip.getChildByName()のAS2バージョン?
-
06-07-2019 - |
質問
" DOM"を担当しようとしています。この小さなFlash 8 / AS2プロジェクトの参照。
ますますイライラするようになったのは、他のムービークリップやオブジェクトへの参照を取得することです。たとえば、現在、フォームの送信ボタンにアクセスするための私のコードは次のようになっています
var b:Button = _level0.instance4.submitBtn;
AS3の MovieClip.getChildByName()
またはJavascriptの document.getElementById()
に類似したAS2のインスタンス取得メソッドがあることを望んでいました。これらの匿名インスタンスの名前をハードコーディング(上記の instance4
のように)しているのは、本当に本当に汚い感じがするからです。
しかし、このAS2リファレンスには、この種のものはありません。 p>
解決
MovieClipがFlash IDEのステージに配置されている場合、プロパティパネルで適切なインスタンス名を付けることができます。
動的に追加された場合は、名前を付けて、さらに参照を保存することもできます:
var my_MC=createEmptyMovieClip("instanceName", depth);
どちらの場合でも、 _parentClip.instanceName
または my_MCでアドレス指定できます。
他のヒント
これを行うにはいくつかの方法があります。最も簡単な方法は、配列表記を使用することです。次のような前の例:
var b:Button = _root.instance4.submitBtn;
配列表記では次のようになります。
var b:Button = _root["instance4"].submitBtn;
したがって、すでに作成された100個のボタンをループして、アルファを0に設定する場合:
for( var i:Number = 0; i < 101; i++)
{
var button:Button = _root["instance"+i].submitBtn;
button._alpha = 0;
}
eval(&quot; instance4&quot;)を使用して同じことを行うこともできますが、スコーピングの問題に少し不安があります。
自分で書くこともできます(コードはテストされていませんが、アイデアは得られます):
MovieClip.prototype.getElementByName = function(name : String) : Object
{
var s : String;
var mc : Movieclip = null;
for( s in this )
{
if( this[s] instanceof MovieClip )
{
if( s == name )
{
mc = this[ s ];
break;
}
mc = this[s].getElementByName( name );
}
}
return( mc );
}