• ベストアンサー

送る・返るボタンでのインスタンス指定 AS3

AS3初心者です。 下記アドレスのサンプルに、 送るボタン と 返るボタン を追加したいのですが、次画像のインスタンス指定の仕方が分かりません。 送るボタンを押すと、今表示している画像>次へと進み 戻るボタンを押すと、今表示している画像>前へと戻る ようにしたにのですが。(ループはしてもしなくてもよいです。) http://gihyo.jp/dev/serial/01/as3/0032?page=1 (page=2は無視) よろしくお願いします。

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

>(ループはしてもしなくてもよいです。) ということですから 例えば「送るボタン」には「next_btn」というインスタンス名を付け 「戻るボタン」には「prev_btn」というインスタンス名を付けた場合 スクリプトを次のように変更すれば良いでしょう(変更例)↓ //------------------------------------------------- // タイムライン: メイン // MovieClipインスタンス // サムネイル: button0_mc~button2_mc(★変更) // 前へ・次へ: prev_btn , next_btn(★追加) // 表示画像: my0_mc~my2_mc // フレームアクション var glow:GlowFilter = new GlowFilter(0x000033); var dropShadow:DropShadowFilter = new DropShadowFilter(); var filters_array:Array = [glow,dropShadow]; //カウンタ用変数を用意(★追加) var cnt:int = 0; // 新規Objectインスタンスの生成 var showList:Object = new Object(); // インスタンス名のプロパティに対応する //[インスタンスの参照,番号] を要素にもつ配列を格納(★変更) showList.button0_mc = [my0_mc,0]; showList.button1_mc = [my1_mc,1]; showList.button2_mc = [my2_mc,2]; button0_mc.addEventListener(MouseEvent.ROLL_OVER, xShow); button1_mc.addEventListener(MouseEvent.ROLL_OVER, xShow); button2_mc.addEventListener(MouseEvent.ROLL_OVER, xShow); //prev_btnクリック時に関数prevShowを実行(★追加) prev_btn.addEventListener(MouseEvent.CLICK,prevShow); //next_btnクリック時に関数nextShowを実行(★追加) next_btn.addEventListener(MouseEvent.CLICK,nextShow); function xShow(eventObject):void { // Objectからインスタンス名のプロパティに納められた対応する参照を得る var show_mc:MovieClip = showList[eventObject.currentTarget.name][0]; // Objectからインスタンス名のプロパティに納められた対応する番号を得る(★追加) cnt = showList[eventObject.currentTarget.name][1]; xClearAll(); show_mc.visible = true; show_mc.filters = filters_array; } //関数prevShowの定義(★追加) function prevShow(e:MouseEvent):void { //もしcntが0より大きければcntを-1する cnt = (cnt > 0) ? cnt-1:cnt; //関数xClearAllを実行 xClearAll(); //my○_mc を表示してフィルターをかける this["my" + cnt + "_mc"].visible = true; this["my" + cnt + "_mc"].filters = filters_array; } //関数nextShowの定義(★追加) function nextShow(e:MouseEvent):void { //もしcntが2未満であればcntを+1する cnt = (cnt < 2) ? cnt+1:cnt; //関数xClearAllを実行 xClearAll(); //my○_mc を表示してフィルターをかける this["my" + cnt + "_mc"].visible = true; this["my" + cnt + "_mc"].filters = filters_array; } xClearAll(); function xClearAll():void { my0_mc.visible = false; my1_mc.visible = false; my2_mc.visible = false; my0_mc.filters = []; my1_mc.filters = []; my2_mc.filters = []; } //------------------------------------------------- ※ ★マークを付けた辺りを変更・追加しています。 【注釈1】 //もしcntが0より大きければcntを-1する cnt = (cnt > 0) ? cnt-1:cnt; などにある「?:」を三項演算子と言います。 もしわからない場合は Google などで「ActionScript 三項演算子」などと検索してみてください。 【注釈2】 //my○_mc を表示してフィルターをかける this["my" + cnt + "_mc"].visible = true; などにある [] を配列アクセス演算子と言います。 もしわからない場合は次のページなどをご参考に。 「ドット演算子と配列アクセス演算子 - Flash テクニカルノート」 http://www.fumiononaka.com/TechNotes/Flash/FN1107002.html ( http://www.fumiononaka.com/TechNotes/Flash/FN0507001.html )

koocom
質問者

お礼

BlurFiltan 様 ありがとうございます。 勉強になります!

関連するQ&A

専門家に質問してみよう