- ベストアンサー
アクションスクリプトを簡素化したい!
- アクションスクリプトを使ってムービークリップのカラー変化シミュレーターを作成していますが、共通する文言が多く、スッキリと簡素化したいです。
- 16個のボタンと20個のカラーパーツを持つムービークリップのカラー変化シミュレーターを作成していますが、ファイルサイズを考慮して簡素化したいです。
- アクションスクリプトでムービークリップのカラー変化シミュレーターを作成していますが、共通する文言が多く、少しでも簡素化したいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
考え方や使い勝手などによって簡素化する方向も変わりますから 下に書くことは1つ方法例です。 まずは簡素化と言うよりも 普通の単純な書き方に整理します↓。 //----------------------------------------- import flash.geom.ColorTransform; import flash.geom.Transform; var trans:Transform = new Transform(myMovieClip); my_btn01.addEventListener ( MouseEvent.CLICK , onClick01 ); function onClick01 ( event:MouseEvent ) { var colorTrans:ColorTransform = new ColorTransform(1,1,1,1,250,30,0,0); trans.colorTransform = colorTrans; } my_btn02.addEventListener ( MouseEvent.CLICK , onClick02 ); function onClick02 ( event:MouseEvent ) { var colorTrans:ColorTransform = new ColorTransform(1.15,1.05,0.85,1,244,60,-178,0); trans.colorTransform = colorTrans; } my_btn03.addEventListener ( MouseEvent.CLICK , onClick03 ); function onClick03 ( event:MouseEvent ) { var colorTrans:ColorTransform = new ColorTransform(1,2,1,1,0,0,0,0); trans.colorTransform = colorTrans; } //----------------------------------------- さらに Dictionary クラスを使って 各ボタン対応の ColorTransform を適用させる流れにします↓。 //----------------------------------------- import flash.geom.ColorTransform; import flash.geom.Transform; var trans:Transform = new Transform(myMovieClip); //Dictionaryインスタンス「colorTransDic」を作成 var colorTransDic:Dictionary = new Dictionary(); //「colorTransDic」の各ボタン要素に各ColorTransformを登録 colorTransDic[my_btn01] = new ColorTransform(1,1,1,1,250,30,0,0); colorTransDic[my_btn02] = new ColorTransform(1.15,1.05,0.85,1,244,60,-178,0); colorTransDic[my_btn03] = new ColorTransform(1,2,1,1,0,0,0,0); //「my_btn01」~「my_btn03」クリック時に関数「onClick」を実行 my_btn01.addEventListener ( MouseEvent.CLICK , onClick ); my_btn02.addEventListener ( MouseEvent.CLICK , onClick ); my_btn03.addEventListener ( MouseEvent.CLICK , onClick ); //関数「onClick」の定義 function onClick ( event:MouseEvent ) { //クリックされたボタン要素に対応するColorTransformを適用 trans.colorTransform = colorTransDic[event.currentTarget]; } //----------------------------------------- これが1つの方法例です。 もっとも //「my_btn01」~「my_btn03」クリック時に関数「onClick」を実行 の部分などは さらに for文 を使って一気に指定することもできますよね。 「ActionScript 3.0で始めるオブジェクト指向スクリプティング 第32回 Dictionaryクラスを使う」 http://gihyo.jp/dev/serial/01/as3/0032
お礼
早々のご指導ありがとうございました。素晴らしいの一言です。すっきりして嬉しい限りです。 またColorTransform(1,1,1,1,250,30,0,0);とまとめれるのですね、自分でスクリプトを 長くしていました・・・お恥ずかしい。 上級者の方とお見受けしてもう二つ質問させて下さい。 //「my_btn01」~「my_btn03」クリック時に関数「onClick」を実行部分などはさらに for文 を使って一気に指定することもできますよね。とのことですがどの様にされますか? 以下の様にしても当然の如くエラーが出まして。 for (var i=0; i<16; i++){ "my_btn0"+ (i+1).addEventListener(MouseEvent.CLICK,onClick); } あとカラー設定をメインタイムラインに記述して各ボタンから共通で使うとかは可能でしょうか? こんな感じで登録して呼び出すみたいなのが出来れば最高です。 var color1 = new flash.geom.ColorTransform(1,1,1,1,100,100,100,0); var color2 = new flash.geom.ColorTransform(1,1,1,1,200,200,200,0); var color3 = new flash.geom.ColorTransform(1,1,1,1,250,250,250,0); 宜しくお願いいたします。