• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:1つのボタンで外部ファイルを順番に読み込む)

1つのボタンで外部ファイルを順番に読み込む

このQ&Aのポイント
  • 写真のアルバムを作成している際に、外部ファイルに保存された写真を順番に読み込む方法を教えてください。
  • 現在、flashMXを使用して写真のアルバムを作成しています。写真は外部ファイル(jpg)に保存されており、写真の入れ替えは1つのボタンを使用して行なっています。
  • (1)犬の写真、(2)猫の写真、(3)金魚の写真といった具体的な写真があり、それぞれの写真をボタンを押すことで表示するようにしています。また、戻るボタンと進むボタンも作成し、現在開かれている写真の一つ前や次の写真に切り替えることもできるようにしたいです。

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

  • ベストアンサー
noname#35109
noname#35109
回答No.2

#1です。 若干勘違いしていましたね。すみません。 「戻る」 や 「進む」 ボタンというのは, 前の表示に戻る (ブラウザの戻るボタンのようなもの) ではなくて, 例えば, 「pho02.jpg」が表示されていたら, 「戻る」 ボタンで 「pho01.jpg」 に戻る, 「進む」 ボタンで 「pho03.jpg」 に進む, という意味だったのですね。 それだと凄く簡単です。 #1 で回答したように,いちいち前の段階を記録するという必要はなくなります。 変数 i をプラスマイナスして,その番号の付いた JPEG をロードすれば良いだけです。 > 都合がよくなると分かる日がいつになるか > 分かりませんが、これからは0を取ってみます。 その日はおそらく今日ではないかと思います。 このつたなくて申し訳ない回答が理解出来れば今日です。 外部JPEGを 「pho0.jpg」,「pho1.jpg」,「pho2.jpg」,…,「pho10.jpg」,…「phoN.jpg」 という名前にしておきます。 JPEGが 11 枚以上(pho10.jpg以上) 存在するのであれば, こうしておかないと,データベースを別に用意したり,不要な分岐が必要になるため,大変やっかいです。 まずフレーム1のスクリプト --------------------- // 変数 i に 0 という初期値を設定(可変) var i = 0; // JPEG の最終番号を設定(可変) var N = 12; // pho?.jpg を pho にロード(不要かも…) loadMovie ("pho"+_root.i+".jpg", pho); --------------------- 上の例は,「pho0.jpg」~「pho12.jpg」 まで,13枚のJPEGがあった場合です。 とりあえず最初に何かを読み込むパターンにしています。 読み込むボタンのスクリプト --- pho0.jpg の場合 --------------------- on (release) { _root.i = 0; loadMovie ("pho"+_root.i+".jpg", pho); } --------------------------------------- --- pho1.jpg の場合 --------------------- on (release) { _root.i = 1; loadMovie ("pho"+_root.i+".jpg", pho); } --------------------------------------- 読み込むボタンのスクリプトは,以下 _root.i = 1; の 1 などの部分が変わるだけです。 「戻るボタン」 のスクリプト --------------------------------------- on (release) { // もし i が 0 でなければ i を i-1 にする if (_root.i != 0) { _root.i--; } loadMovie ("pho"+_root.i+".jpg", pho); } --------------------------------------- 「進むボタン」 のスクリプト --------------------------------------- on (release) { // もし i が N でなければ i を i+1 にする if (_root.i != _root.N) { _root.i++; } loadMovie ("pho"+_root.i+".jpg", pho); } --------------------------------------- 結局,_root の i をプラスマイナスして, その数字が付いた JPEG をロードするだけです。 if文を使っているのは, 写真がないのに戻ったり進んだりするのがマズイからだけです。 これは単なるエラー処理ですから本題とは関係がありません。 写真がなくて,何も表示されなくなるのでもOKでしたら, 例えば「戻る」ボタンは, --------------------------------------- on (release) { _root.i--; loadMovie("pho"+ _root.i + ".jpg", pho); } --------------------------------------- となります。 原理はそれだけです。 だいたい以上です。 = = = 連番ネーミングの話 = = = = = = = = =  上記の場合,もし, 「pho00.jpg」,「pho01.jpg」,…,「pho10.jpg」,… のような名前でしたら, i のプラスマイナスだけではうまく行かなくなります。  もし,i が 10 以上であれば,  → loadMovie("pho"+ _root.i + ".jpg", pho);  もし,i が 9 以下であれば  → loadMovie("pho0"+ _root.i + ".jpg", pho); このような場合分けスクリプトにしないとなりません。 これは CPU にとっても,メモリにとっても,ファイル容量(転送速度)にとっても, また書く人間の労力をとっても,無駄です。 もっと桁数が増えるとそれどころの分岐ではなくなります。 さらに,変則的な名前だと, p1 = "inu.jpg"; p2 = "neko.jpg"; p3 = "kingyo.jpg"; …   … もしくは p = new Array("inu.jpg","neko.jpg","kingyo.jpg",…); のようにデータベースが必要になります。 そして i をプラスマイナスして, _root["p" + i] もしくは p[i] などの値をロードするというようなもっとややこしい物になります。 それだと最初から, 「pho0.jpg」,「pho1.jpg」,「pho2.jpg」,…,「pho10.jpg」,…「phoN.jpg」 にしておけば,全て楽です。 「pho0.jpg」,「pho1.jpg」,「pho2.jpg」,… にする方が良いというのはそういうことです。 他にもまだたくさん利用することはありますが,楽になる一例です。 「pho0.jpg」,… だと簡単に機械的に自動で処理できます。 実際は外部のものと言うより, 内部の "同種" で"複数" のオブジェクトのネーミングをそういう連番形式にするのですが, 外部データにも同じ事が言えるということです。 例えば, 上の「pho0.jpg」,「pho1.jpg」,「pho2.jpg」,… を読み込むボタンが, 内部の "同種" で"複数" のオブジェクトです。 仮に, 「pho0.jpg」 を読み込むボタンのインスタンス名を 「btn0」 「pho1.jpg」 を読み込むボタンのインスタンス名を 「btn1」 「pho2.jpg」 を読み込むボタンのインスタンス名を 「btn2」  …       …      … 「pho12.jpg」 を読み込むボタンのインスタンス名を 「btn12」 としておいて, 例えばフレームのスクリプトに, ---------------------- for (var k = 0; k<=12; k++) { _root["btn"+k]._visible = false; } ---------------------- と書くとすると, 「btn0」~「btn12」 のボタンは一斉に消えます。 1ボタン1ボタンに対して, _root.btn0._visible = false; _root.btn0._visible = false; _root.btn0._visible = false;  …      … _root.btn12._visible = false; なんて言うことは書かなくて良いのです。 ボタンが100個以上になっても, for (var k = 0; k<=12; k++) の k<=12;  の部分を変えるだけで 一気に 100 個でも 1000 個でもボタンを消せます。 ※ 動作・作成環境   #1,#2のスクリプトともに   作成可能環境: Flash 5 以上   スクリプト動作環境: Flash Player 5 以上

kanako888
質問者

お礼

Sassakunさん 返事が送れてすみません。 色々調べていて寄り道したりして分かったり、また余計分からなくなってたりしているところでした。 この方法で完璧に理想通りになりました。ありがとうございます! 名前の付け方も理解し、別のところで○○00.jpgが使えなくて、これか!って丁度分かる出来事がありました。 ご親切にどうもありがとうございました!

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

その他の回答 (1)

noname#35109
noname#35109
回答No.1

loadMovie で JPEG を ロードする際, それと同時に _root に p1,p2,p3,… という変数を動的に用意して, それらの変数に "pho00.jpg" や "pho01.jpg" などなど… の値を記憶させておいて, 「戻る」や「進む」で,それらのデータを呼び起こすという方法はどうでしょうか。 まずフレーム1のスクリプト --------------------- // 変数 i に 0 という初期値を設定 var i = 0; --------------------- ↑これは,Flash MX までは特に不要なのですが, 念のため変数の初期値を設定しておきます。 読み込むボタンのスクリプト --- pho00.jpg の場合 --------------------- on (release) { var pho_name = "pho00.jpg"; loadMovie(pho_name, pho); _root.i++; _root["p"+i] = pho_name; } --------------------------------------- --- pho01.jpg の場合 --------------------- on (release) { var pho_name = "pho01.jpg"; loadMovie(pho_name, pho); _root.i++; _root["p"+i] = pho_name; } --------------------------------------- ボタンのスクリプトは,以下var pho_name = "pho01.jpg"; の部分が変わるだけです。 「戻るボタン」 のスクリプト --------------------------------------- on (release) { _root.i--; if (_root["p"+i] == undefined) { _root.i++; } loadMovie(_root["p"+i], pho); } --------------------------------------- 「進むボタン」 のスクリプト --------------------------------------- on (release) { _root.i++; if (_root["p"+i] == undefined) { _root.i--; } loadMovie(_root["p"+i], pho); } --------------------------------------- という感じです。 _root["p"+i] の意味ですが,これは, _root.p?  ということです。 [ ] は配列アクセス演算子と呼ばれる物ですが, 配列でなくても [ ] でくくれば, それは 「変数(オブジェクト)名ですよ」 という意味になるので, 例えば i が 25 であった場合は, _root.p25  例えば i が 100 であった場合は, _root.p100  という具合の意味になります。 i はボタンがクリックされる度に変わるので, _root.p1 _root.p2 _root.p3 … に,"pho03.jpg" とか "pho02.jpg"とか,何かが記録されていきます。 ------------------------------ ちなみに, 上の例を見てもわかりますが, 何か数字を加えたりする場合や,配列を使う場合は,連番になります。 だから,本当は, 「pho00.jpg」,「pho01.jpg」「pho02.jpg」,… という名前より, 「pho0.jpg」,「pho1.jpg」「pho2.jpg」,… としたほうがいろいろ都合が良くなる場合が多々あります。 上の例ではそうする必要は特にありませんが, なるべく,桁を合わせることより,0から始まる連番を付ける方が良いと思います。 色々していると便利なことがグッと増えることが実感できると思いますが, この説明では,「pho00.jpg」 などをそのまま使わせていただきました。

kanako888
質問者

お礼

早速の回答ありがとうございます。 見よう見まねでスクリプトを貼り付け たしかに希望通りに動いたような気がしたのですが、 (1)(2)(3)ボタンを先に順番通りに押してJPEGをロードしてないと見れないことが分かりました。 そしてよく読み直し・・・ 最初の4行 >loadMovie で JPEG を ロードする際, それと同時に _root に p1,p2,p3,… という変数を動的に用意して, それらの変数に "pho00.jpg" や "pho01.jpg" などなど… の値を記憶させておいて, 「戻る」や「進む」で,それらのデータを呼び起こすという方法はどうでしょうか。 先にロードしてからでしたね(涙 こんなに丁寧に教えてもらったのですが、 戻る進むボタンだけで動かしたかったのです。 今回は外部ファイルを使用したかったのですが 諦めて、普通に写真を中に入れて希望通りの動きを優先したいと思います。 ------------ ファイル名の件ですが、初心者にとってファイル名を付けるのも一苦労でした。日本語付けたくないし。 それで、いろんなサイト見ていたら○○001.jpgというのが正直カッコイイと思ったので付けたまでです(暴露 都合がよくなると分かる日がいつになるか分かりませんが、これからは0を取ってみます。 ご丁寧にありがとうございました。

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

関連するQ&A