プロが教える店舗&オフィスのセキュリティ対策術

AS3初心者です。

下記アドレスのサンプルに、
送るボタン と 返るボタン を追加したいのですが、次画像のインスタンス指定の仕方が分かりません。

送るボタンを押すと、今表示している画像>次へと進み
戻るボタンを押すと、今表示している画像>前へと戻る

ようにしたにのですが。(ループはしてもしなくてもよいです。)

http://gihyo.jp/dev/serial/01/as3/0032?page=1 (page=2は無視)


よろしくお願いします。

A 回答 (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/FN110 …
( http://www.fumiononaka.com/TechNotes/Flash/FN050 … )
    • good
    • 0
この回答へのお礼

BlurFiltan 様

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

お礼日時:2012/09/18 21:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!