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

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

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

こんにちはkanako888です。 flashMXを使用しています。 さて写真のアルバムを作っているのですが、写真は外部ファイル(jpg)にしています。 写真の入れ替えは、写真のタイトル横にボタンを作り 1つずつ入れ替えています。 (1) 犬の写真(pho00.jpg) (2) 猫の写真(pho01.jpg) (3) 金魚の写真(pho02.jpg)  (1)~(3)の番号がボタンでスクリプトをそこに入れています。 (1)のボタン on (release) { loadMovie("pho00.jpg", pho); } (2)のボタン on (release) { loadMovie("pho02.jpg", pho); } (3)のボタン on (release) { loadMovie("pho03.jpg", pho); } 外部ファイルの名前は pho00.jpg から順番に pho01.jpg pho02.jpg という風に番号が増えているだけです。 これらを利用して(しなくても) 戻るボタン と 進むボタン というのを作り どの写真が開かれてあっても、 戻るを押せば1つ前の番号の写真に 進むを押せば1つ次の番号の写真に という風には出来ませんか? どうぞ宜しくお願い致します。

  • Flash
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
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

  • 外部JPEGについて

    外部JPEGを使い、写真を表示させるものを作っています。 on (release) { loadMovie("01.jpg", photo); } でボタンを押すと上部に大きく写真が出るところまでは 出来たのですが、そのボタンを例えば01.jpgのサムネイル にしたいのです。 (大きい写真があって下の部分に写真のサムネイルが並んでいて それをクリックすると、大きい写真の部分に表示される) スクリプトはあまり詳しくないので、詳しく教えてくれるサイト 等ありましたら、教えてください。 よろしくお願いします。

  • 外部から読み込んだSWFファイルがサイズオーオーバー

    初めて質問させていただきます。 質問内容はloadMovieを使って外部からSWFファイルを読み込んでいたのですが、こちらの希望しているサイズに収まってくれません。 (1)740×370SWFファイル(メイン画面) (2)740×270SWFファイル(読み込まれる画面) の2つがあり(1)に(2)を読み込ませるように on (release) { _root.display.loadMovie("alice_pro.swf"); } というふうに記述して読み込んで作動するのです。 しかし、(2)の表示サイズが740×270ではなく、(2)の作成のすべてのオブジェクトが表示されて、希望の枠((2))の中に納まってくれません。 状況: 1、WinXP 2、FlashMX 3、(1)と(2)のSWFファイルは同じフォルダの中 4、loadmovieは機能する 5、(1)の画面に(2)を呼ぶためのボタンを作成し、スクリプトを記入しています。 6、中心点も(1)画面の左上端の置いており、そこを基点として表示されます。 問題点: (2)のSWFファイルが作成時に設定した740×270の枠からはみ出たオブジェクトも表示されるので、これを740×270の画面の中だけを表示させたい。 回りくどくなりましたが、一番やりたいことは(2)画面の中にきれいに収めたいということです。 ご面倒かけてすみませんが、皆さんのスキルを賜りたいと思います。よろしくお願いします。

    • ベストアンサー
    • Flash
  • Flashで外部jpgファイルをmcに読み込む際にスムージングをかける

    Flashで外部jpgファイルをmcに読み込む際にスムージングをかける方法が分からなく困っています。 初心者で、理解しづらい文章だとは思いますが宜しくお願い致します。 今は5つのボタンがありまして、 それぞれに on (release) { loadMovie("○○○.jpg", "happyboy"); } で happyboyというmcに画像が表示されるようにしています。 このままだと拡大、縮小した際に画像がギザギザになってしまうので かなり困っています。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • flashで、レベルの違うボタンから外部swfファイルの読み込み

    flash初心者のkiyuです。 メインのflashサイトに外部swfファイルを読み込みたいのですが、上手くいきません。 1.mcはrootにおいてあります。 2.ボタンは2つあり、1つはおなじrootの同じステージ内。そして、2つ目のボタンは違うレベルにあります。 3.同じrootにあるボタンは読み込み可能。でも、違うレベルにあるボタンは読み込み不可。 コードは、 on(release){ _root.gotoAndPlay("フレーム名"); _root.mcのインスタンス名.loadMovie("外部ファイル名.swf"); } です。 いろいろ思考錯誤をくりかえしたのですが、どうにも上手くいきません。。。 よろしくお願いします。

  • loadMovie()を組み込んだswfファイルをさらに別のswfファイルで読み込みたい。

    ActionScript初心者です。よろしくお願いいたします。 掲題の通りなのですが、外部のjpgファイルをloadMovieで読み込むswfファイルを、さらに別のswfファイルで読み込みしようとすると、jpgが表示されずに困っています。具体的には以下の通りです。 (1)jpgファイルを読み込むswfファイルについて ・ファイル名:「sub_screen.swf」 ・ムービークリップシンボル(インスタンス名"PHOTO_STAGE")に外部のjpgファイルを読み込ませるために、ボタンに以下のスクリプトを記述 "on(release){loadMovie("photo1.jpg",_root.PHOTO_STAGE);}" ・「sub_screen.swf」及び「photo1.jpg」は同一フォルダに保存 (2)sub_screen.swfを読み込むswfファイル ・ファイル名:「main_screen.swf」 ・ムービークリップシンボル(インスタンス名"STAGE")に「sub_screen.swf」を読み込ませるべく、ボタンに以下のスクリプトを記述 "on(release){loadMovie("sub_screen.swf",_root.STAGE);}" ・「main_screen.swf」、「sub_screen.swf」及び「photo1.jpg」は同一フォルダに保存 以上のような条件で「main_screen.swfファイル」を実行すると、jpgファイルだけが表示されません。(sub_screen.swfのボタン等は表示されます。)2重にloadMovieを実行することは不可能なのでしょうか? ご協力をお願いします。

  • 外部の画像、もしくはswfを読み込んでボタンをつくりたい

    以下2パターンを試してみました。 1 ボタンシンボルが配置してあるswfファイルを作成(0.swf)し、「sum」というMCに読み込み loadMovie("0.swf","sum"); 結果は、通常状態の表示は問題なく行いましたが、マウスをボタンの上にもってきても反応しませんでした。 (カーソルは変更されるが画像に変化なし) 2 MCをつくり、そこに on (rollOver) { this.gotoAndStop("2"); } on (rollOut) { this.gotoAndStop("1"); } 下の階層に、1フレーム目および2フレーム目に通常状態とrollOverの画像を読み込むためのMCを配置。それぞれsum_1、sum_2。 そのMCがあるタイムライン上に loadMovie("0.jpg","sum.sum_1"); loadMovie("0_on.jpg","sum.sum_2"); 要するに箱を作って、画像だけ差し替えられるようにした感じです。 実行すると、1フレーム目は正常に表示されますが、マウスをかざした時に白くなってしまい、マウスを戻しても白いままで最初の画像が戻りません。 loadMovieはこういう動きなのでしょうか。 外部から読み込んでボタンとして動作させたい場合はどのようにすればいいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 外部swfファイルの閉じ方

    メインに"stage2というmcを配置し、123.swfを読み込むボタンを配置しました。 ボタンスクリプト: on (release) { _root.construction(); loadMovie("123.swf", "_root.stage"); _root.stage.swapDepths(5); for (i=1; i<=4; i++) { _root["m_"+i]._visible = false; } 開いた外部swfファイルを閉じる設定をしたいのですが、どのようにすればよいでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ボタンを押した時、外部swfを読み込み

    ムービークリップ内のボタン(写真のサムネイル)を押した時、外部.swf(写真やコメントを書いたswf)を読み込もうとしております。 _rootに空のムービークリップを配置し、インスタンス名を load_mcと指定。 _rootに配置したムービークリップの中に配置してあるボタンに on (release) { this._parent.load_mc.loadMovie("comment.swf"); } と書きました。しかしボタンを押してもcomment.swfが表示されません。 解決方法をお教えください。よろしくお願いいたします。

  • jpgを外部リンクさせswfで書き出し、loadmovieで読み込む

    こんにちは、よろしくお願いします。 WinXPでFlashMXを使用しています。 タイトルの通り、jpg画像を外部リンクさせたものをswfで書き出し、そのswfファイルをloadmovieで読み込みたいのですが、jpg画像が表示されません。 jpg画像以外のテキスト文字などは正常に表示されます。 jpg画像を外部リンクさせ、swfで書き出すところまでは正常に表示されるのですが、そのswfファイルをloadmovieで読み込ませると画像だけが表示されません。 お分かりになる方がいらっしゃいましたら、ぜひ御回答お願いします。

  • FLASHの外部SWFファイルの読み込み方法

    FLASHのアクションスクリプトの勉強中です。 外部SWFファイルを複数用意してボタンで呼び出す方法はわかったのですが、その読み込まれ方をかっこよくできないか考えています。 何個かSWFファイルを作成した後、新規FLAファイルを作成しました。 そのファイルにスクリーン用のシンボル(上のSWFファイルと同じ大きさのもの)を作成しインスタンス名を「screen」にしました。 ほいでもって複数のボタンシンボルを作成し、 on (release) { _root.screen.loadMovie("pekepke.swf"); } という感じで外部swfファイルをそれぞれのボタンより読み込むとこまではできたのですが、その読み込まれ方と切り替るときの表示の仕方をふわっと現れ、ふわっと消えてからファイルが現れるというふうにしてみたいのですができますでしょうか? ちなみにflash8を使用しております。ヒントでもいただけるとありがたく思います。

専門家に質問してみよう