- ベストアンサー
AS3 クリックしたボタンの値を返すスクリプト
こんにちは、AS3の初心者です。 ステージ上にボタン1~10があって、 この10個のボタンにまとめて 『クリックしたボタンのインスタンス名を返す』 というスクリプトを書きたいのですが、只今お手上げ状態です。 いい案がありましたらご教授お願いします。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
全体的に何だか状況がわかりませんが。。。 「10個のボタン」というのは ステージ上に手作業で配置したSimpleButtonクラスのインスタンスで すでにプロパティインスペクタより手動で10種類のインスタンス名が付けられているのでしょうか? よくわからないので 以下は勝手にそういうこと(上記のような条件である)とします。 そういうこととして, インスタンス名に関するご質問に関しての回答です。 「10個のボタン」には 仮に「a_btn」「b_btn」「c_btn」…「j_btn」というインスタンス名が付けられているものとします。 インスタンス名はそのインスタンスの「name」プロパティを見ればわかりますから スクリプトは次のような感じでできます。 「10個のボタン」が存在するタイムラインのフレームに書くスクリプト例です。 //------------------------------------ //ボタンの参照を登録する配列を作成 var btn_arr:Array = new Array(); btn_arr[0] = a_btn; btn_arr[1] = b_btn; btn_arr[2] = c_btn; btn_arr[3] = d_btn; btn_arr[4] = e_btn; btn_arr[5] = f_btn; btn_arr[6] = g_btn; btn_arr[7] = h_btn; btn_arr[8] = i_btn; btn_arr[9] = j_btn; //配列の要素数分ループ for (var i:int = 0; i < btn_arr.length; i++) { //各ボタンにクリック時のリスナー関数を登録 btn_arr[i].addEventListener(MouseEvent.CLICK,clickFunc); } //関数「clickFunc」の定義 function clickFunc(e:MouseEvent):void { //クリックしたボタンのインスタンス名を出力 trace(e.currentTarget.name); } //------------------------------------ 以上で「制御」→「ムービープレビュー」などで 各ボタンをクリックして出力パネルを確認すれば 「a_btn」や「j_btn」などが出力されると思います。 ======================== しかし思うのですが..., 何の意味があってボタンのインスタンス名などを必要とするのでしょうか? ActionScript 3.0 (ActionScript 2.0 以下は別) では スクリプトでボタンのインスタンス名など取得しても 後に何か良いことが起こるとも思えません。 ややこしくなるだけだと思います。 デメリット(遠回り)こそあってもメリット(近道)などほとんどないような。。。 ご存じの事柄かもしれませんが 次のページ全体を良く読んで理解してみてください↓。 「F-site [AS3] MovieClipインスタンスとインスタンス名」 http://f-site.org/articles/2008/04/19014939.html 何がしたいのかはわかりませんが, 各ボタンに対して,それに対応する文字列やインスタンスなどを関連付けるときには Dictionary クラスという便利なものもありますし↓。 「第32回 Dictionaryクラスを使う」 http://gihyo.jp/dev/serial/01/as3/0032 この辺のことを理解していたり知っていれば 普通はボタンのインスタンス名など取得しようとは思わないと思います。 (私が考え付かないような何か特殊な事情があれば要ることもあるのかもしれませんが。) またその他, ActionScript だけの話ではなく, 他言語とも共通な「クロージャ」を使う方法もありますし↓。 「ActionScriptで、押したボタンの判別方法を教えてください。」 http://okwave.jp/qa/q5921604.html ※ ActionScript 2.0 以下においては インスタンスを インスタンス名 で名指ししていたため インスタンス名 は重要であり スクリプトで取得する必要がある場合もありました。