• ベストアンサー

Flashランダム表示にリンクをプラスさせたい

数種類のフラッシュムービー(swfファイル)をこちら(http://oshiete1.goo.ne.jp/qa1362260.html)の方法で表示させることはできたのですが、さらにリンクを持たせるにはどういった方法をとればいいでしょうか? 通常のムービーに透明な画像を重ねてリンクをおく方法では動きませんでした。リンク先は一つだけです。 ムービーだけランダムに表示して、クリックすれば同じ場所にリンクするという感じのFLASHバナーを作りたいと思ってます。 どうかよろしくお願いします。

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

お持ちの Flash のバージョンなどがわかりませんが。。。 しっかし、参考にされたページは古いです(古過ぎます)ね。 Flash 4 と 5 の間という感じです。 とりあえず、 少なくとも Flash 5 はお持ちで、なおかつ、 Flash Player 5 以上用の SWF をパブリッシュすると考えて良いですよね。 なぜ参考にされたページの方法でできないのかと言うと、 loadMovieNum(1 + random ( 7 ) + ".jpg", 0); で レベル0(_level0 一般的には _root) に直接外部JPEGファイルをロードしているからだと思います。 レベル0(_level0 一般的には _root) に直接外部JPEGファイルなどをロードすると 親SWFのタイムラインすべてが外部JPEGなどに乗っ取られてしまうので あらかじめ置いておいたボタンやスクリプトは全部消えます。 透明のリンク付き画像も消え去ってしまうということです。 逆に言えば、レベル0(_level0 一般的には _root) に外部ファイルをロードしなければ良いだけです。 > 通常のムービーに透明な画像を重ねてリンクをおく方法では動きませんでした。 その リンク をつけておいた透明画像(透明ボタン または 透明ムービークリップ)の下のレイヤーにでも空のムービークリップを作成して その空のムービークリップにインスタンス名を付けて そのムービークリップに 外部SWF なり 外部JPEG をロードすれば良いと思います。 むしろこちらの方がどこにでも書いてある普通の方法だと思います。 ファイルの構造は参考にされたページと同様になっているとします。  任意のフォルダ    ├○○.html(○○.swf を表示)    ├○○.swf    ├1.jpg    ├2.jpg    ├3.jpg    ├4.jpg    ├5.jpg    ├6.jpg    └7.jpg =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= Flash内のレイヤーは3レイヤーにするのが良いと思います。 真ん中のレイヤーに作られた透明リンク画像を配置します。 そのレイヤーはロックしておいた方が良いでしょう。  レイヤー ・・□|○|  レイヤー ・錠□|●| ←透明リンク画像  レイヤー ・・□|○| 一番下のレイヤーに空のムービークリップでも作成して インスタンス名を付けます。 空のムービークリップは 適当にムービークリップを作成して中身を消せばできますね。 インスタンス名はプロパティインスペクタ(プロパティパネル)で命名します。 たとえば 「loaderMC」 と命名するとします。 一番上のレイヤーのフレーム1を選択してそこにスクリプトを書きます。  レイヤー ・・□|○| ←スクリプトを書く  レイヤー ・錠□|●| ←透明リンク画像  レイヤー ・・□|●| ←「loaderMC」 --------------------------------------------- // 変数 myNum に 1~7 のランダムな整数を代入 myNum = 1+Math.floor(Math.random()*7); // loaderMC に 1~7.jpg のどれかをロード loaderMC.loadMovie(myNum+".jpg"); --------------------------------------------- 2行にせずに1行で済ませたい場合は次のようにすれば良いでしょう。 --------------------------------------------------- // loaderMC に 1~7.jpg のどれかをロード loaderMC.loadMovie(1+Math.floor(Math.random()*7)+".jpg"); --------------------------------------------------- ・バージョン  ActionScript : ActionScript 1.0  オーサリング : Flash 5 以上  Flash Player : Flash Player 5 以上  ※ただし JPEG をロードできるのは Flash Player 6 以上 random関数 は Flash Player 4 または Flash Lite 1.x 用のSWFをパブリッシュする場合に使う古い関数で, Flash Player 5 以上での使用は禁止(非推奨)になっています。 Flash Player 5 以上をターゲットとしたSWFを作成する場合は, random関数 ではなく,JavaScriptと同じく Mathクラスのrandomメソッドを使うようにします。 Math.random() これで 0以上~1未満 のランダムな数(小数)が得られます。 Math.random()*7 これでその範囲が7倍に拡大されます。 したがって 0以上~7未満 のランダムな数(小数)が得られます。 Math.floor(Math.random()*7) これで小数点以下を切り捨てます。 したがって 0以上~7未満 のランダムな整数が得られます。 つまり 0以上~6以下 のランダムな整数が得られます。 1+Math.floor(Math.random()*7) これで 1以上~7以下 のランダムな整数が得られます。 1+Math.floor(Math.random()*7)+".jpg" これで 1以上~7以下 のランダムな JPEG 名が得られます。 =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= なお、 Flash MX 以上をお持ちでしたら, ActionScriptで空のムービークリップが作成できますから, リンクボタンもJPEGをロードするための空のムービークリップも手動で作る必要はありません。 すべて全自動で簡単にできます。 レイヤーもフレームも1つだけで良いです。  レイヤー ・・□|○| ←スクリプトを書く --------------------------------------------------- // この階層(_root) に インスタンス名「linkMC」 のムービークリップを作成 this.createEmptyMovieClip("linkMC", 0); // 「linkMC」 内に インスタンス名「loaderMC」 のムービークリップを作成 linkMC.createEmptyMovieClip("loaderMC", 0); // 「linkMC」 クリック時の動作を定義 linkMC.onRelease = function() { // 「○○.html」 を別窓で開く getURL("○○.html", "_blank"); }; // loaderMC に 1~7.jpg のどれかをロード linkMC.loaderMC.loadMovie(1+Math.floor(Math.random()*7)+".jpg"); --------------------------------------------------- ・バージョン  ActionScript : ActionScript 1.0  オーサリング : Flash MX 以上  Flash Player : Flash Player 6 以上 =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= さらになお、 Flash MX 2004 以上をお持ちでしたら, MovieClipLoader クラスのスクリプトが使用できますから, リンクボタンとJPEGをロードするための空のムービークリップとを 1つにすることができます。 この場合もレイヤーとフレームは1つだけで良いです。  レイヤー ・・□|○| ←スクリプトを書く --------------------------------------------------------------- // この階層(_root) に インスタンス名「loaderMC」 のムービークリップを作成 var mc:MovieClip = createEmptyMovieClip("loaderMC", 0); // MovieClipLoaderインスタンス mcl を作成 var mcl:MovieClipLoader = new MovieClipLoader(); // ロード完了時の動作を定義 this.onLoadInit = function():Void { // 「loaderMC」 クリック時の動作を定義 mc.onRelease = function():Void { // 「○○.html」 を別窓で開く getURL("○○.html", "_blank"); }; }; // mcl のリスナーとして この階層を登録 mcl.addListener(this); // loaderMC をターゲットとして 1~7.jpg のどれかをロード表示 mcl.loadClip(1+Math.floor(Math.random()*7)+".jpg", "mc"); --------------------------------------------------------------- ・バージョン  ActionScript : ActionScript 2.0  オーサリング : Flash MX 2004 以上  Flash Player : Flash Player 7 以上 これで 2004年 に到着です。 また ActionScript 1.0 グループ の最後になります。 (1.0 も 2.0 も基本的には変わらない。) =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= ついでですから、ActionScript 3.0 も書いてしまいますか。 Flash CS3 以上をお持ちでしたら, ActionScript 3.0 が使用できますから, その場合,次のようにするのが1つの方法例です。 この場合もレイヤーとフレームは1つだけで良いです。  レイヤー ・・□|○| ←スクリプトを書く --------------------------------------------------------------- // Loaderクラスのインスタンス「ld」を作成 var ld:Loader = new Loader(); // 1~7.jpg のランダムなリクエストを作成 var loadURL:URLRequest=new URLRequest(1+Math.floor(Math.random()*7)+".jpg"); // 「ld」 にそのランダムなJPEGをロード ld.load(loadURL); // 「ld」をステージに配置 addChild(ld); // ○○.html というリクエストを作成 var linkURL:URLRequest=new URLRequest("○○.html"); // クリック時に実行するイベントリスナーを登録 実行関数 openPage addEventListener(MouseEvent.CLICK,openPage); // ボタンモードにする(ハンドカーソル) buttonMode=true; // 関数 openPage の定義 function openPage(evt:MouseEvent):void{ // リンクURLを開く navigateToURL(linkURL); } --------------------------------------------------------------- ・バージョン  ActionScript : ActionScript 3.0  オーサリング : Flash CS3 以上  Flash Player : Flash Player 9 以上 やっと現代人になれた気分... かもしれません。

surumeinu
質問者

お礼

詳しくありがとうございます! これでやってみます!

関連するQ&A