- 締切済み
Flash無限ループとランダム表示につきまして
外部jpgを読み込んでスライドショーをしたいと思い 探していたところ下記の記事を見つけ使用させて頂く事にしました。 http://oshiete1.goo.ne.jp/qa3147800.html ほぼ、これで理想のものなのですが、 2点程できないことがあり、皆様の知恵を拝借できないかと思い こちらに書かせて頂きました。 ■お知恵を拝借したいこと 1.読み込んだ画像の無限ループ 上記の記事の仕様では1つのムービークリップに読み込んだjpgリストが最後まで表示されたらストップします。 表示方法は ・フェードイン→画像A静止(希望秒)→フェードアウト→フェードイン→画像B静止→フェードアウト…(以下同じ) この仕様を最後まで表示されたら、最初に表示した画像に戻りまたアニメーションを繰り返すと言う設定に、いわゆる無限ループにしたいと思っております。 希望表示方法は ・フェードイン→画像A静止(希望秒)→フェードアウト→フェードイン→画像B静止→フェードアウト…(以下同じ)→(最後まで終わったら)→フェードイン→画像A静止→フェードアウト→(繰り返し) 上記の記事を参考にして思う限りいじくってみたのですがループすることは無く、最後の画像で終わってしまった状態でございます。 2.画像のランダム読み込み表示 大量の画像から、ランダムに抽出し5枚ほど表示したと思っております。 上記参考記事内では file_list = new Array(); file_list = [ "image" , "pic" , "photo" ]; と、file_listに入れる画像名を指定しています。 これはこれですばらしいです。 私の希望は、このfile_listの中に 01~100(画像ファイル名は連番で作成するとして) の画像ファイルの中から、ランダムで5点の画像を 格納したいと言うことになります。 初心者で身分不相応なことを言っていることとは思いますが、 皆々様のご協力願えれば幸いでございます。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- DPE
- ベストアンサー率85% (666/776)
今回はスクリプトで読み込むファイルを動的に選び、選んだファイルの情報を配列変数 file_list に登録します。 冒頭でファイル名を file_list に格納している file_list = [ "image" , "pic" , "photo" ]; ↑この部分を削除するか、コメントにしてください。 ( file_list = new Array(); の行は削除しないでください) 次に、ファイルをランダムに選び、file_list に登録する処理を追加します。 ファイル名の番号を 001 や 010 というように3桁に統一すると Windows などの表示リストでは見やすくなるのですが、スクリプトでは数値として扱えなくなるために面倒になります。 最初のうちは、ファイルを管理する上では少々不便になっても、1桁や2桁の数字の場合もアタマに 0 を付けないファイル名にした方が簡単です。 読み込むファイルは共通の名前+連番( 1 ~ 100 )で名前が付いているものとして、ランダムに選ぶ方法は次のように考えます。 ファイル名に付いている連番に着目して、1 ~ 100 までの間で乱数を発生させ、番号を1つ選びます。 この時に file_list の中身を調べて、同じ番号がなければ選んだ番号を配列変数に登録し、既に登録されていた場合は登録せずに破棄して再度選び直します。 この作業を繰り返して、指定の数だけ(今回の件では5つ)登録したら、リストは完成です。読み込む時は、この配列変数を見ながらファイルを読み込みます。 スクリプトにしますと、次のようになります。 このスクリプトを、「読み込みに関するイベント処理」の前あたりに追加してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) /*****************************************************/ /////////////////////////////////////////////////////// //読み込むファイルのリストを作成 /////////////////////////////////////////////////////// //ファイルに共通する名前 file_name = "image"; //ファイルの総数と、選ぶ数の総数 file_max = 100; slide_max = 5; //指定の数だけファイルの番号をランダムに選んで //ファイル番号のリストを作る while( file_list.length != slide_max ) { //1~file_maxの中から、数字をランダムに1つ選ぶ rnd = Math.floor( Math.random() * file_max ) + 1; //ファイルリスト内に同じ番号はあるか? for( i = 0 ; ( i < file_list.length ) && ( file_list[ i ] != rnd ); i++ ) ; //同じ番号が登録されていなければ登録する //既に登録されていた場合は、この番号を捨てる if( i >= file_list.length ) { file_list.push( rnd ); } } /*****************************************************/ 多くの中からいくつかのものを重複なく選ぶには様々な方法があり、それぞれ一長一短があります。 今回は、「 100 個の中から1個を適当に取り出し、重複していた場合は選び直す」方法を採用しました。 乱数次第では選び直しばかり繰り返すことになり、時間がかかったりいつまでも作業が終わらなくなる可能性があるところが欠点ではありますが、100 個の中から5個を選ぶという割合であれば、選び直しになる確率は低くなります。 機会がありましたら、他の方法も研究してみてください。 file_list に入るのは、1 や 100 といった数字だけです。 実際にファイルを読み込む時は、これに全ファイルに共通する名前と拡張子を追加してファイル名を作ります。 先のスクリプトでは、変数 file_name に共通する名前を格納しています。ここでは仮に” image○○”というファイル名を想定しています。違う名前を付けた場合は変更してください。 なお、選ぶ対象のファイルの総数が 100 ではなくなった場合は変数 file_max を、スライドの枚数が5枚ではなくなった時は変数 slide_max を変更していただくと対処できます。 先述の通り、今回は配列変数 file_list には番号しか入っていませんので、ファイルを読み込む部分も変更が必要です。 「メインの処理」の case 0: のところにある //できたムービークリップに画像を読み込む load_obj.loadClip( file_list[ i ] + ".jpg" , clip ); の部分を、 load_obj.loadClip( file_name + file_list[ i ] + ".jpg" , clip ); ↑このように変更してください。 ------------------------------------------------------------ ループ再生は実は簡単で、終了判定をとらずに、最後のスライドまで表示した時はスライドの番号を 0 にし、次のスライドを表示する要領でフェードインを始める case 2: に戻ればいいのです。 スライドの番号は変数 current_pic に入っています。 配列変数は 0 から始まりますから、配列変数の長さを表す file_list.length (この例では 5 )の剰余を利用すると、if 文で判断しなくても最後のスライドの次に最初のスライドに戻すことができます。 詳しくは省略しますが、current_pic を1つ進めた後で file_list.length による剰余を求めると、 0 → 1 → 2 → 3 → 4 → 0 …という順番を取得できます。 スクリプトにしますと、次のようになります。 「メインの処理」の中の case 5: の部分を、次のように変更してください。 /*****************************************************/ //表示中のスライドをフェードアウト //最後まで表示したら最初のスライドに戻る case 5: //表示中のムービークリップの参照を格納 clip = this[ "clip" + current_pic ]; //フェードアウト:アルファを徐々に下げる //0になったら終了 clip._alpha -= fade_spd; if( clip._alpha <= 0 ) { //このムービークリップを非表示にする clip._visible = false; //スライドの番号を更新し、スライドの初期化処理に戻る current_pic = ( ++current_pic ) % file_list.length; act_step = 2; } break; /*****************************************************/ 「ムービープレビュー」では、表示比率が”100%”に設定されていると画像が変な位置に表示されることがありますが、HTML に配置した場合や swf ファイルをスタンドアロンプレイヤーで再生した場合はステージの中央に表示されます。 プレビューで表示位置が正しくならない場合は、プレビュー中に「表示」メニュー→「表示比率」で”すべて表示”に設定し、再度プレビューし直してみてください。