![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
現在、10個程度のswfファイルと60個程度のjpgファイルがあります。それらをjavascriptを使わずに(基本的にはFLASHで)、アクセスするたびにHTML上でランダム表示させたいと考えています。
これまで、ひとつのswfファイルをベースにして、以下のアクションスクリプトを使って、10個のswfファイルをランダム表示させることには成功しています。
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//1~3の整数の乱数を,変数 ransuu にセット
ransuu = Math.floor(Math.random()*13)+1;
//ムービー内に ransuu+".swf" をロード
this.loadMovie(ransuu+".swf");
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
たぶんこのスクリプトを発展させれば、jpgもランダム表示できるようになると思います。
ランダム表示させたい複数のswfファイルとjpgファイルは同じ階層にあります。HTMLはそのひとつ上の階層にあります。ベースとなるswfファイルは、複数ランダム表示用のファイル群と同じ階層でも良いし、もしくはHTMLと同じ階層でも良いことにします。
どのような方法があるか、教えてください。
*ちなみに、ベースとなるswfファイルを複数ランダム表示用のファイル群と同じ階層において、そのひとつ上の階層にあるHTMLから読み込んだ場合、うまく表示されませんでした。このアクションスクリプトを引用した元のウェブサイトでは、HTMLも、ベースとなるswfファイルも、ランダム表示される複数のファイル群も、全て同じ階層にあるという前提になっていました。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?8acaa2e)
No.1ベストアンサー
- 回答日時:
ランダムに読み込まれるのは,
SWF なのか JPEG なのかは,わからないという条件ですよね。
また,SWF のファイル数も変わる可能性があって,
JPEG のファイル数も変わる可能性があるものとして考えます。
ファイル数は変わりますが,
とりあえずのサンプルとして,
次のようなファイル構造であった場合のスクリプトを考えます。
任意のフォルダ
├ index.html (index.swf を表示)
├ index.swf
└ files (フォルダ)
├ 0.swf
├ 1.swf
├ 2.swf
├ 0.jpg
├ 1.jpg
├ 2.jpg
├ 3.jpg
└ 4.jpg
まず SWF ファイル も JPEG ファイルも 0 という名前から連番にします。
配列を使いますので,0 から始まる連番の方がわかりやすくなります。
SWF が表示されるのか,JPEGが表示されるのかわからない状態,
つまりファイル名がごちゃごちゃ混在している状態で,
なおかつ均等にランダムを必要とされているのでしょうから,
ファイル名のデータベースとなるものを用意して,
そのデータの中からランダムなデータを選んで表示するしかないと思います(多分)。
イメージで書くと次のような感じです。
データ = リンゴ,バナナ,イチゴ,レモン,ミカン
乱数 = ランダムな5つの数を代入
→ データの 乱数番目 の要素を読み込む
このような感じです。
しかし,
データ = 0.swf,1.swf,2.swf,0.jpg,1.jpg …
として書いて行くのは非常に面倒なので,
データを用意する部分も ActionScript でやってしまいます。
以上のような場合のスクリプトは,
こんな感じになります↓(コピペ可能)。
////////////////////////////////////////////////////
// ※SWF と JPEG ファイルの個数を記入
num_swf = 3;
num_jpg = 5;
// loadFile という配列を作成
load_file = new Array();
// SWFファイルのデータを作成
for (i=0; i<num_swf; i++) {
load_file[i] = i+".swf";
}
// JPEGファイルのデータを作成
for (var i = 0; i<num_jpg; i++) {
load_file[i+num_swf] = i+".jpg";
}
// ファイル数分の整数の乱数を,変数 ransuu にセット
ransuu = Math.floor(Math.random()*(num_swf+num_jpg));
// ムービー内に ransuu+".swf" をロード
this.loadMovie("files/"+load_file[ransuu]);
/////////////////////////////////////////////////////
以上です。
以下は,単に上のスクリプトを説明しているだけです。
長いですが,もしわからない部分があれば,参考にしてください。
--- 各行の説明 -----------------------------
// ※SWF と JPEG ファイルの個数を記入
num_swf = 3;
num_jpg = 5;
上のファイル構造の例で,
読み込むSWFファイルは,
0.swf,1.swf,2.swf
この3つですから,num_swf = 3; と設定しておきます。
これは読み込む SWF の数によって変えてください。
読み込むJPEGファイルは,
0.jpg,1.jpg,2.jpg,3.jpg,4.jpg
この3つですから,num_jpg = 5; と設定しておきます。
これも読み込む JPEG の数によって変えてください。
この2行の部分だけを変えてもらうと,
あとはその数から色々計算するので,他の部分は変える必要がなくなります。
また,変動する可能性のある部分を変数化しておく方がメンテナンスなどで都合がよくなります。
作っているときは良いのですが,
作り終えたあとしばらくすると自分が書いたスクリプトでも何のことかわからなくなるものです。
そんな時,スクリプトをいちいち思い出す必要を無くすためにも,値を変数化しておきます。
// loadFile という配列を作成
load_file = new Array();
見たまんま, load_file という配列変数オブジェクトを作成しています。
配列の話をしていると,それだけでこの回答欄がいくつも必要になります。
もしわからない場合は,次の URL などを参考にしてください。
「配列とは?Array」
http://www.1art.jp/flash/le/lesson34/lesson34.htm
// SWFファイルのデータを作成
for (i=0; i<num_swf; i++) {
load_file[i] = i+".swf";
}
for文で配列の要素に,SWFのファイル名データを代入しています。
for文 を使わなければ,
l
oad_file[0] = 0+".swf";
load_file[1] = 1+".swf";
load_file[2] = 2+".swf";
と書いているのと同じです。
これで,配列データはどうなるかと言うと,
load_file = ["0.swf", "1.swf", "2.swf"];
こうなります。
しかし,
for文 を使わず羅列した場合は,
データの数分の行が必要となり書くのが面倒ですし,
配列そのものを書く場合も,横にやたら長くなり,また面倒です。
つまり,数が変わるたびに行や書くことが増減してしまいます。
労力やミスなどを防ぐためにも,for文 などでループさせる方が良いです。
「繰り返し文 for - FLASHアクションスクリプト入門編」
http://isvalid.jp/actionscriptLab/ASlesson/actio …
// JPEGファイルのデータを作成
for (var i = 0; i<num_jpg; i++) {
load_file[i+num_swf] = i+".jpg";
}
これも同じです。
SWFファイル名データ要素(エレメント)の後に,JPEGファイル名データ要素を羅列するので,
load_file[i+num_swf] にしています。
JPEG は 60 もあるのですから,絶対に for文 などループで処理するべきです。
JPEG は 60 あっても,1000 あっても,この3行で済みます。
// ファイル数分の整数の乱数を,変数 ransuu にセット
ransuu = Math.floor(Math.random()*(num_swf+num_jpg));
これは見たままですね。
最初に定義(設定)した数は,上の場合,
num_swf = 3;
num_jpg = 5;
ですから,その場合,
num_swf + num_jpg は 3+5=8です。
したがって,
ransuu = Math.floor(Math.random()*8);
となり,0~7まで8つの整数の乱数が ransuu に入ります。
// ムービー内に ransuu+".swf" をロード
this.loadMovie("files/"+load_file[ransuu]);
このスクリプトの load_file[ransuu] は,
したがって load_file[0~7のいずれか] となります。
つまり, 0.swf ~ 4.jpg のうちいずれかのファイル名がここに来ます。
this.loadMovie("files/"+ ( 0.swf ~ 4.jpg のうちいずれか ) );
仮に ransuu に 7 が入った場合,
load_file=["0.swf","1.swf","2.swf","0.jpg","1.jpg","2.jpg","3.jpg","4.jpg"]
このうち,0から始まる7番目,
つまり 普通の日本人が言う 8 番目 の要素データが入りますから,
この部分は "3.jpg" となります。
したがってこの行は,
this.loadMovie("files/"+ "3.jpg");
となり,つまり,
this.loadMovie("files/3.jpg");
となります。
外部ファイルへのパスの話になりますが,
loadMovie や getURL など,Flash 外部へのパスは
SWFから見たパスではなく,SWFを貼り付けたHTMLから見たパスになります。
index.html から,例えば 3.jpg を見ると,上の場合,
任意のフォルダ
├ index.html (index.swf を表示)
└ files (フォルダ)
└ 3.jpg
ですから,
files というフォルダの中に 3.jpg があります。
したがって,
"files/3.jpg" となります。
もちろん "./files/3.jpg" でもかまいません。
つまり,
this.loadMovie("./files/"+load_file[ransuu]);
でも良いです。
その辺は HTML のルールと同じです。
「MovieClip.loadMovieで外部ファイルを読込む」
http://www.fumiononaka.com/TechNotes/Flash/FN030 …
~引用~
> this.my_mc.loadMovie("test.swf");
>
> 読込む外部ファイルのURLは、
> 絶対パスまたは相対パスで指定します。
> 相対パスを使う場合は、FlashのSWFファイルではなく、
> SWFファイルの埋込まれたHTMLファイルが
> パスの起点になります。
> 記のサンプルスクリプトは、相対パスの例です。
見るまでのことはないと思いますが,
一応,HTMLでのパスの指定方法です↓。
「リンク - 超初心者のためのホームページ作成講座」
http://park16.wakwak.com/~html-css/link_koza/lin …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 図に示す階層構造で,現在のディレクトリ(カレントディレクトリという)が*印のディレクトリであるとき, 2 2022/11/16 10:55
- Windows 10 Windows10で、フォルダにあるすべてのファイルを、下層フォルダも含め一つの階層へ配置し直したい 3 2022/05/31 09:50
- Excel(エクセル) エクセル、画像ファイル名の書かれたセル(複数個所)に画像を一括で表示させる方法 1 2023/04/19 00:19
- HTML・CSS HTMLを正しく表示させるには 2 2023/06/18 09:12
- その他(IT・Webサービス) サイト上のフォルダ階層一覧、ファイル一覧を閲覧する方法は? 1 2022/11/11 15:49
- Excel(エクセル) フォルダAから1つのファイルだけを、フォルダBへを移動するVBAについて 2 2022/07/25 11:45
- PDF AutoCAD図面をPDF fileに変換した際、画像情報やブロック名はわかるのでしょうか。 1 2022/06/03 09:42
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) Excelから複数のWordファイルを操作する方法について教えて頂きたい。 やりたいことは、複数のW 2 2022/07/26 20:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
swfファイルの開き方を教えてく...
-
サポートされたファイル形式お...
-
個別に違う添付ファイルを付け...
-
【VBA】マクロの入ったファイル...
-
PDFファイルの倍率を変えて保存...
-
複数のブックを新しいブックのS...
-
エクセルで「特定の文字を含む...
-
エアコンの冷媒 R410Aの重...
-
A4の紙に印刷されている文字を...
-
ローカル上とネット上で保存し...
-
e-taxで送信ファイルの拡張子が...
-
VBS フォルダ内にあるすべての...
-
ビデオファイルのプロパティの...
-
garagebandのLR Mixの方法について
-
VBSで動画ファイルの時間を読み...
-
Visual Basic.NETの、Form 間で...
-
至急エクセルで最小限の保存が...
-
拡張子「.IDJ」を、windo...
-
ASPを使ってサーバ側のバッチを...
-
vba メモリ節約
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ブラウザで見るときだけ動かな...
-
Flashが表示されません。
-
FLASHで作成した.swfファイルが...
-
FLASHゲームのデータについて
-
PSP よく分かりません!! swf...
-
swfファイルの開き方を教えてく...
-
swfファイルのfc2ブログへの表...
-
swf の width と height を調べ...
-
一体何が起こったのでしょうか?
-
Flashファイルをスタンドアロー...
-
後ろから光がさしてるようなFLASH
-
Flash Playerの作成
-
SWFファイルの解析ソフトについて
-
Flash上の数値の取得というのは...
-
actionscriptとFlash
-
paraflaで、swfだけでのサイズ固定
-
IEでFLASHを表示させた時
-
ホームページビルダーとFlash
-
DreamweaverCS3でswfが表示され...
-
exeファイルをWeb上で見せる方法
おすすめ情報