• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクションスクリプトを簡素化したいです。)

アクションスクリプトを簡素化したい!

このQ&Aのポイント
  • アクションスクリプトを使ってムービークリップのカラー変化シミュレーターを作成していますが、共通する文言が多く、スッキリと簡素化したいです。
  • 16個のボタンと20個のカラーパーツを持つムービークリップのカラー変化シミュレーターを作成していますが、ファイルサイズを考慮して簡素化したいです。
  • アクションスクリプトでムービークリップのカラー変化シミュレーターを作成していますが、共通する文言が多く、少しでも簡素化したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.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

kohsuke_goo
質問者

お礼

早々のご指導ありがとうございました。素晴らしいの一言です。すっきりして嬉しい限りです。 また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); 宜しくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 多次元配列のデータがうまく吸い出せません。

    こちらでご指導仰ぎながらアクションスクリプトの簡素化を進めています。いい感じのところまできていますが最終局面で行き詰っています。 myMovieClipというムービークリップと3つのボタンmy_btn1、my_btn2、my_btn3を配置しそれぞれのボタンをクリックしたらムービークリップの色が変わるという物を作っています。エラーは出ないのですが全てのボタンで同じ色(指定していない)に変化します。なにがおかしいのでしょうか? 本来なら colorTransDic[my_btn1] = new ColorTransform(1,1,1,1,122,15,122,0); とするところを簡素化したく配列に色データを詰め込み colorTransDic[this["my_btn" + i]] = new ColorTransform(colors[i - 1]); としましたがこれが間違っているようです。 お手数ですがご指導宜しくお願いいたします。 スクリプトは以下の通りです。 import flash.geom.ColorTransform; import flash.geom.Transform; var trans:Transform = new Transform(myMovieClip); var colorTransDic:Dictionary = new Dictionary(); var colors:Array = [[1,1,1,1,255,255,255,0],[1,1,1,1,122,122,122,0],[1,1,1,1,0,0,0,0]]; for (var i:int = 1; i<=3; i++) { colorTransDic[this["my_btn" + i]] = new ColorTransform(colors[i - 1]); this["my_btn" + i].addEventListener( MouseEvent.CLICK , onClick ); } function onClick( event:MouseEvent ) { trans.colorTransform = colorTransDic[event.currentTarget]; }

    • ベストアンサー
    • Flash
  • Flash MCのモーショントウィーン

    Flash CS5 ActionScript 3.0にて制作しています。 ムービークリップに動きをつけて色を変更するスクリプトを書いています。 ・ボタン1を押すとムービークリップの色が変わる ・ボタン2を押すと10フレーム目に飛んでモーショントウィーン それぞれ機能は正常に動くのですが、ボタン1を押した後にボタン2を押すとモーショントウィーンが動きません。 ボタン2を押した後にボタン1を押す場合は動きます。 ムービークリップのインスタンス名はtest として下記のようなスクリプトを書いています。 どなたか、お力をお貸し下さい。 よろしくお願い致します。 btn.addEventListener(MouseEvent.CLICK, black); black(event:MouseEvent):void { var color = new flash.geom.ColorTransform(0, 0, 0, 1); test.transform.colorTransform = color; } btn2.addEventListener(MouseEvent.CLICK, btn2); function btn2(event:MouseEvent):void{ gotoAndPlay("10"); }

    • ベストアンサー
    • Flash
  • Flash ボタンを押すとフォントカラーを変更する

    Flash CS5を使用しています。 action script3.0にてボタンを押すとフォントのカラーを変更できるようにしたいと思っています。 テキストのインスタンス名 text0 にして下記のようなスクリプトを書いたのですが 色が変更されません。 どのようにしたらよいか分かる方、お力を貸していただけないでしょうか? red_btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler); function fl_MouseClickHandler(event:MouseEvent):void { var color_mtx = new flash.geom.ColorTransform(0.9, 0, 0, 1, 0, 0, 0, 0); text0.transform.colorTransform = color_mtx; }

    • ベストアンサー
    • Flash
  • Action Script3.0で曲の再生と停止

    play_btnとstop_btnの二つのボタンを作り、 それぞれ再生と停止ができるようにしました。 再生繰り返し回数は1回です。 そこで、play_btnをクリックし再生します。 再生が終わってから、再びplay_btnをクリックしても再生しません。 play_btnをクリックし再生してから、 stop_btnをクリックし停止させ、 再度play_btnをクリックすると再生します。 連続してplay_btnをクリックしたときには、 再生中の場合は再生を停止し新たに再生させるようにしないといけないんだろうなとおもうのですが、、。 どうスクリプトを記述すれば良いかよく分からないので、 どなたか教えていただければ幸いです。 var soundCh:SoundChannel; var snd:Sound = new BGM(); play_btn.addEventListener(MouseEvent.CLICK, PlayClick); stop_btn.addEventListener(MouseEvent.CLICK, StopClick); //イベントハンドラ定義 function PlayClick(evt:MouseEvent):void { if (soundCh == null){ soundCh = snd.play(0,1); } } function StopClick(evt:MouseEvent):void { if (soundCh != null){ soundCh.stop(); soundCh = null; } }

    • ベストアンサー
    • Flash
  • Flash as3.0版ソース  ボタンで内容遷移、うまくいかない…

    こんにちは。 Flash as3.0勉強始めてばかりです。 下記のソースのエラーはボタンを押したたびに、表示した内容はどんどん重ねています。たとえば、(1)ボタンを押した場合、(1)の内容を表示されまして。(2)ボタンを押したとき、画面には(1)+(2)の内容を表示されています。 いろいろ調べましたんですが、なかなかうまくいかないです。 ご解答をよろしくお願い致します。 詳細ソース ーーーーーーーーーーーーーーーーーーーーーー // イベントを設定 Button_tsr.addEventListener ( MouseEvent.CLICK , onClick1 ); Button_gaiyou.addEventListener ( MouseEvent.CLICK , onClick2 ); Button_message.addEventListener ( MouseEvent.CLICK , onClick3 ); Button_jigyou.addEventListener ( MouseEvent.CLICK , onClick4 ); Button_saiyou.addEventListener ( MouseEvent.CLICK , onClick5 ); Button_toiawase.addEventListener ( MouseEvent.CLICK , onClick6 ); // ローダーオブジェクトを作成し配置 var loader_obj : Loader = new Loader(); stage.addChild (loader_obj); loader_obj.x = 85; loader_obj.y =97; // 画面クリックをするとonClickが動作するイベント function onClick1 ( event:MouseEvent ) { // URLRequestを設定 var url0:URLRequest = new URLRequest( "Top.swf" ); // 実際にページに飛ぶ loader_obj.load ( url0 ); } function onClick2 ( event:MouseEvent ) { // URLRequestを設定 var url1:URLRequest = new URLRequest( "概要.swf" ); // 実際にページに飛ぶ loader_obj.load ( url1 ); } function onClick3 ( event:MouseEvent ) { // URLRequestを設定 var url2:URLRequest = new URLRequest( "Message.swf" ); // 実際にページに飛ぶ loader_obj.load ( url2); } function onClick4 ( event:MouseEvent ) { // URLRequestを設定 var url3:URLRequest = new URLRequest( "サービス.swf" ); // 実際にページに飛ぶ loader_obj.load ( url3); } function onClick5 ( event:MouseEvent ) { // URLRequestを設定 var url4:URLRequest = new URLRequest( "情報.swf" ); // 実際にページに飛ぶ loader_obj.load ( url4); } function onClick6 ( event:MouseEvent ) { // URLRequestを設定 var url5:URLRequest = new URLRequest( "問合せ.swf" ); // 実際にページに飛ぶ loader_obj.load ( url5); }

  • 外部から読み込んだ画像にリンクをつけたい

    ActionScript3.0についての質問です。 ボタンをクリックした時に外部から画像を読み込んで、 読み込んだ画像にそれぞれに外部リンクをつけたいのですが、 リンクのつけ方が分かりません。 ボタンをクリックして外部から画像を読み込むところまではできたのですが、 その画像にリンクをつけるところで困っています。 超初心者ですので、できるだけ現状のプログラムを生かして変更したいのですが… どなたか分かる方がいらっしゃいましたら、教えていただきたいです。 よろしくお願いいたします。 【Main.as】 package { import flash.display.Sprite; import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.display.Loader; import flash.display.LoaderInfo; import flash.net.URLRequest; import flash.display.SimpleButton; public class Main extends Sprite { private var contentMC:MovieClip; private var contentLoader:Loader; //コンストラクタ public function Main(){ //外部ファイルを配置するムービークリップの生成 contentMC = new MovieClip(); contentMC.x=0; contentMC.y=0; addChild(contentMC); //Loaderオブジェクトを生成 contentLoader = new Loader(); contentMC.addChild(contentLoader); //ボタン処理 my1_btn.addEventListener(MouseEvent.CLICK,my1Handler); my2_btn.addEventListener(MouseEvent.CLICK,my2Handler); my3_btn.addEventListener(MouseEvent.CLICK,my3Handler); } //各ボタンをクリックしたときに外部ファイルを読み込む private function my1Handler(evt:MouseEvent):void{ var url="img/flashimg01.jpg"; loadContent(url); } private function my2Handler(evt:MouseEvent):void{ var url="img/flashimg02.jpg"; loadContent(url); } private function my3Handler(evt:MouseEvent):void{ var url="img/flashimg03.jpg"; loadContent(url); } //外部ファイル読込 private function loadContent(url){ var req:URLRequest = new URLRequest(url); contentLoader.load(req); } } }

    • ベストアンサー
    • Flash
  • AS3.0 gotoAndStopを使いたい

    最近ASを始めた初心者です。 Flash AS3.0で画面遷移(フレーム移動)をカスタムクラスを用いて行いたいのですがうまくいきません。どうすればよいのかどなたか解る方教えてもらえないでしょうか。 よろしくお願いします。 flaファイル _______________________________________________________________________________ import Frame; stop(); //Aは移動するフレーム名 //aaaはボタンの名前 var Obj1:Frame = new Frame(aaa,"A"); _______________________________________________________________________________ asファイル _______________________________________________________________________________ package{ import flash.display.*; import flash.events.*; public class Frame{ var my_btn:SimpleButton; var my_Frame:String; public function Frame(btn:SimpleButton, Fr:String){ my_btn = btn; my_Frame = Fr; my_btn.addEventListener(MouseEvent.CLICK,go); } public function go(event:MouseEvent):void{ gotoAndStop(my_Frame); } } } ____________________________________________________________________________________

    • ベストアンサー
    • Flash
  • テキストフィールドかの色情報からムービークリップの色が変わるようにした

    テキストフィールドかの色情報からムービークリップの色が変わるようにしたいです。ActionScript3.0です。 ●colBox2というテキストフィールドがあり、bmpData(BitmapData型)という場所で取得したRGB色情報が表示されるようになっています。(例えば赤ならFF0000というように)。 var colBox2:TextField = new TextField(); colBox.x = 450; addChild(colBox2); ●bmpData上でマウスを上げたらその場所の色情報がcolBox2上に表示されて、colBox2上のテキストを読み取って、boardというムービークリップの色が変わるようにしたいのですが、エラーこそ出ないですが、boardの色は変わらないです。どうずれば変更できるのでしょうか?宜しくお願いします。 var colorTrans:ColorTransform = new ColorTransform(); var trans:Transform = new Transform(board); trans.colorTransform = colorTrans; copy.addEventListener(MouseEvent.MOUSE_UP,mouseUp) function mouseUp(evt:MouseEvent){ var pixelValue:uint = bmpData.getPixel(evt.stageX,evt.stageY); colBox2.text = pixelValue.toString(16);//取得したカラーを代入 colorTrans.color = "0x" + colBox2.text as uint; trans.colorTransform = colorTrans; }

    • ベストアンサー
    • Flash
  • actionscript 3.0 の外部リンク

    初めて質問させていただきます。 Flash CS3 のactionscript3.0にて、サイト内リンクのボタンを作成したのですが、 フラッシュを読み込んだ時点で、インスタンスthe URL4がポップアップで開いてきてしまいます。 そのような記述をしていないのでどうしたら良いか分からず… 何かお知恵をお貸しいただけると幸いです。 よろしくお願い致します。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ↓実際に書いたacitonscriptです。URLはダミーです。 //theURL1という変数に代入し、URLRequestのインスタンスを生成 var theURL1:URLRequest = new URLRequest("http://www.111/A.html"); var theURL2:URLRequest = new URLRequest("http://www.222/B.html"); var theURL3:URLRequest = new URLRequest("http://www.333/C.html"); var theURL4:URLRequest = new URLRequest("http://www.444/D.html"); navigateToURL(theURL1); navigateToURL(theURL2); navigateToURL(theURL3); navigateToURL(theURL4); // イベントリスナーの登録 A_btn.addEventListener(MouseEvent.CLICK,gotoURL1); B_btn.addEventListener(MouseEvent.CLICK,gotoURL2); C_btn.addEventListener(MouseEvent.CLICK,gotoURL3); D_btn.addEventListener(MouseEvent.CLICK,gotoURL4); // URL1へジャンプする function gotoURL1(event:MouseEvent):void { var theURL1:URLRequest = new URLRequest("http://www.111/A.html"); navigateToURL(theURL1,"_self"); } // URL2へジャンプする function gotoURL2(event:MouseEvent):void { var theURL2:URLRequest = new URLRequest("http://www.222/B.html"); navigateToURL(theURL2,"_self"); } // URL3へジャンプする function gotoURL3(event:MouseEvent):void { var theURL3:URLRequest = new URLRequest("http://www.333/C.html"); navigateToURL(theURL3,"_self"); } // URL4へジャンプする function gotoURL4(event:MouseEvent):void { var theURL4:URLRequest = new URLRequest("http://www.444/D.html"); navigateToURL(theURL4,"_self"); }

  • AS3.0のカスタムクラスを使いたいのですが

    Flash AS3.0を使って出席を確認するプログラムを作っているのですが、カスタムクラスを利用して動作させようとすると思った通りに動作しません。 下のプログラムをカスタムクラスを使って動作させるにはどうすればいいのか教えてもらえないでしょうか、よろしくお願いします。 ________________________________________________________________________________________________________ import flash.geom.*; import flash.utils.*; import flash.events.*; import flash.display.*; var starttime:Number; var stoptime:Number; var reset:Number; var flag:int; var sec; var min; var hou; var h; var m; Clock.addEventListener(Event.ENTER_FRAME,getdate); time1.addEventListener(Event.ENTER_FRAME,count); mc1.addEventListener(Event.ENTER_FRAME,changecolor); btn1.addEventListener(MouseEvent.CLICK, ST); function getdate(e:Event):void{ //時間情報の取得 var time :Date = new Date(); var year = time.getFullYear(); var mon = time.getMonth()+1; var day = time.getDate(); h = time.getHours(); m = time.getMinutes(); //時計の桁あわせ h = ((h < 10) ? "0" : "") + h; m = ((m < 10) ? "0" : "") + m; //テキストに書き込む Clock.text =""+year+"/"+mon+"/"+day+" "+h+":"+m; } function count(e:Event):void{ if(flag==1){ var mil = getTimer() - reset; sec = Math.floor(mil/1000); min = Math.floor(sec/60); hou = Math.floor(min/60); // 次の単位を超えないように制限 mil %= 1000; sec %= 60; min %= 60; //時間の桁をあわせる min = ((min < 10) ? "0" : "") + min; hou = ((hou < 10) ? "0" : "") + hou; // すべてつなげて文字として表示 timer1.text ="経過時間 "+hou + " : " + min; }else{ timer1.text ="経過時間 00 : 00"; } } function changecolor(e:Event){ var trans:Transform = new Transform(mc1); var colorTrans:ColorTransform = new ColorTransform( 1, 1, 1, 1, 0, 0, 0, 0); if(flag==1){ if(sec <20){ colorTrans.redOffset = 0; colorTrans.greenOffset = 0; colorTrans.blueOffset = 255; } if(sec >=20 && sec <40){ colorTrans.redOffset = 0; colorTrans.greenOffset = 255; colorTrans.blueOffset = 0; } if(sec>=40 && sec<60){ colorTrans.redOffset = 255; colorTrans.greenOffset = 0; colorTrans.blueOffset = 0; } } trans.colorTransform = colorTrans; } function ST(event:MouseEvent):int{ if(flag == 0){ flag = 1; Startstop1.text ="入室時間"; time1.text =""+h+":"+m; reset = getTimer(); }else{ Startstop1.text ="退室時間" time1.text =""+h+":"+m; flag = 0; } return flag; } _______________________________________________________________________________________

    • ベストアンサー
    • Flash