質問: スライドショーの制御 過去ログの http://oshiete1.goo.ne.jp/kotaeru.php3?q=1690465 の方法を参照させていただき、スライドショーを作成しましたが、 これに「戻る」「進む」「一時停止/再生」のボタンを付け加える事は 可能でしょうか?よろしくお願いいたします。
回答: 引用されているスクリプトを書いた者です。 >> ボタンを付け加える事は可能でしょうか? 可能ですよ。 そのスクリプトで行くと, 結局,コントロールは基本的に,変数phot_no を操作すれば良いわけです。 変数phot_no の値は相対的に上げて行っています。 具体的には, phot_no ++; の部分です。 ここをphot_no ++; で単純に 1 をプラスし続けるのではなくて,時には 0 をプラスしたり, -1 をプラスすれば,前進や後退します。 しかし,変数phot_no を操作しただけでは,アルファの変化が止まりませんから, 同時にアルファの変化を止めたり,再開したりさせれば良いのです。 具体的には, _root.mca._alpha += mca_alp; _root.mcb._alpha += mcb_alp; の部分です。 ここも単純にアルファをプラスしたりマイナスしたりするだけでなく,変化を 0 にするパターンを作れば良いのです。 引用されているスクリプトは,操作するスクリプトを書くためだけに存在させたムービークリップに書いていますよね。 ボタンを付けるとなると,そのムービークリップの外部から,ムービークリップ内の変数を操作することになります。 だから,まずそのムービークリップにインスタンス名を付けてください。 以下の例では 『scriptmc』 というインスタンス名を付けたとします。 どっちかわからなかったので,sharedobject を使った方のスクリプトを以下のように書きかえます。 ※ スクリプトの各行の前には,インデントを付けるため, 全角空白文字をたくさん入れています。 コピペをする場合は, 全角空白を ""(何もなし) で置換するなどして, 全角空白を削除してください。onclipevent (load) { spd_alp = 5; stop_time = 12; photo_all = 10; //★変数zensin(前進)の初期値を設定★ zensin = 1; //★変数flg_alp(アルファのフラグ)の初期値を設定★ flg_alp = 1; count1 = 0; count2 = 0; //ローカルのsolファイルを読みに行く sol_count = sharedobject.getlocal("mysol"); //もしsolファイルにphoto_countがあれば if (sol_count.data.photo_count != undefind) { phot_no = sol_count.data.photo_count; //もしsolファイルにphoto_countがなければ } else { phot_no = 1; } _root.mca._alpha = 101; _root.mcb._alpha = -1; _root.mca.loadmovie(phot_no+".jpg"); } onclipevent (enterframe) { if (_root.mca._alpha<0) { _root.mca._alpha = 0; _root.mcb._alpha = 100; mca_alp = mcb_alp=0; i = 1; //★以下6行を変えました★ phot_no += zensin; if (zensin == 1 && phot_no>photo_all) { phot_no = 1; } else if (zensin == -1 && phot_no == 1) { phot_no = photo_all; } _root.mca.loadmovie(phot_no+".jpg"); //solファイルに photo_no-1 の値を保存 sol_count.data.photo_count = phot_no-1; } else if (_root.mca._alpha>100) { _root.mca._alpha = 100; _root.mcb._alpha = 0; mca_alp = mcb_alp=0; j = 1; //★以下6行を変えました★ phot_no += zensin; if (zensin == 1 && phot_no>photo_all) { phot_no = 1; } else if (zensin == -1 && phot_no == 1) { phot_no = photo_all; } _root.mcb.loadmovie(phot_no+".jpg"); //solファイルに photo_no-1 の値を保存 sol_count.data.photo_count = phot_no-1; } if (count1>=stop_time) { i = 0; count1 = 0; mca_alp = spd_alp; mcb_alp = -spd_alp; } else if (count2>=stop_time) { j = 0; count2 = 0; mca_alp = -spd_alp; mcb_alp = spd_alp; } //★以下2行を変えました★ _root.mca._alpha += mca_alp*flg_alp; _root.mcb._alpha += mcb_alp*flg_alp; count1 += i; count2 += j; } ★マークを付けた部分が,今回変えた部分です。 そして,ステージ上にはボタンを用意して,各ボタンには以下のようなスクリプトを書けばokです。 「一時停止」ボタン --コピペ可-------------------------- on (release) { _root.scriptmc.zensin = 0; _root.scriptmc.flg_alp = 0; } 「再生」ボタン --コピペ可-------------------------- on (release) { _root.scriptmc.zensin = 1; _root.scriptmc.flg_alp = 1; } 上の2つを1つのボタンで済ませる場合, 「一時停止/再生」切り替えボタン --コピペ可-------------------------- on (release) { if (_root.scriptmc.zensin == 1) { _root.scriptmc.zensin = 0; _root.scriptmc.flg_alp = 0; } else { _root.scriptmc.zensin = 1; _root.scriptmc.flg_alp = 1; } } 「戻る」「進む」ボタンというのがどういうものなのか,よくわかりませんでした。 「戻る」 10→9→8→... のように写真を切り替えるつまり「逆再生」と考えると 「逆再生」ボタン --コピペ可-------------------------- on (release) { _root.scriptmc.zensin = -1; _root.scriptmc.flg_alp = 1; } となります。 「進む」がさらにどういうボタンなのか,よくわかりませんでしたが, 「5なら次は6」ではなくて,「5なら次は7」のように飛ばすボタンだと以下のようになります。 単に phot_no の値を上げてやれば良いわけです。 「進む」ボタン --コピペ可-------------------------- on (release) { _root.scriptmc.phot_no++; } スクリプトを書いた 『scriptmc』 というインスタンス名のムービークリップの中に, 「phot_no」という変数名のダイナミックテキストか,テキスト入力のテキストフィードを置いてやると, 「phot_no」がどうなっているのか観察しやすくなりますよ。 他にも,2つ飛ばしとか,2つ前の写真に戻るとか,同じような考え方で作れると思います。