• ベストアンサー

FLAHを利用したバナーをランダムな場所からスタートしたい

FLASH MX2004でクロスフェードする、5つのバナーが有ります。 このバナーをランダムな位置からスタートさせたいのですが、方法が分かりません。 乱数の取得方法は分かるのですが・・・ 10fpsで、10フレームでクロスフェードし、40フレーム表示させ、また10フレームでクロスという感じで作成し、バナー5つで、合計200フレームとなってます。 初心者なので、申しわけありませんが、解説をお願いします。

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

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

横から失礼します,sassakun と申します。 #1の方の書かれているスクリプトで合っていますよ。 しかし, >> いつも1つ目のバナーから始まってしまいます。 という現象が起こるのですね。 フレーム数も200にして,画像も読み込んで,わざと SWF を重く(と言っても60KB程度に)して, 私も実験をしてみました。 普通の ムービープレビュー では ランダム にジャンプしましたが, パブリッシュしたHTMLを開いて見た場合, 質問者さまと同様に,いつも1つ目のバナーから始まってしまいました。 スクリプトは合っているのに,なぜそういうことが起こるかと言うと, ロード待ち処理を入れていないからだと思います。 最後のフレームまで,ロードが未完了のまま, いきなり フレームの長距離ジャンプ をしようと試みるので, 指定フレームまでジャンプできず,途中で墜落するのですよ。 フレームのラベル名は「p0」,「p1」,「p2」,「p3」,「p4」というのはそのままで, フレーム1 に書かれたスクリプトを,次のように書き直すと,きっとうまく行くと思います。 --------------------------------- // とりあえずストップ this.stop(); // 1フレーム進む時間ごとに毎回{ }内を実行 this.onEnterFrame = function() { // もし全てのロードが完了したら if (this.getBytesLoaded()>=this.getBytesTotal()) { // 変数rdn に 0~4 の乱数をセット var rnd = Math.floor(Math.random()*5); // 変数lbl に「p?」をセット( ? は 0~4 のいずれか) var lbl = "p"+rnd; // ムービーをフレームラベル「p?」に進める this.gotoAndPlay(lbl); // この onEnterFrame を削除 delete (this.onEnterFrame); // ロード未完了の場合は ストップ を継続 } else { this.stop(); } }; --------------------------------- (※上記スクリプトは Flash Player 6 以上で動作します。) つまり,よく見る, 「Now Loading...」 とか 「読み込み中...」 とかいうものが必要だということです。 と言っても スクリプト上は, 上で書いたスクリプト以外, フレーム1 には特に何も置く必要はありません。 上で書いたスクリプトのままでうまく行くとは思います。 しかし,ファイルが重い場合,真っ白な Flash がしばらく表示されます。 もし,真っ白な画面が長く続くのが気になるようでしたら, 「Now Loading...」のような暇つぶし画面を入れてください。 「ローディングムービー作成」 http://www.1art.jp/flash/le/lesson38/lesson38.htm 「Now Loadingのサンプル5個セット」 http://f-site.org/articles/2004/03/18005544.html その他, この辺↓からでも検索すれば,Now Loading 作り方やサンプルはたくさん出てきます。 http://www.google.com/search?hl=ja&q=Now+Loading+Fla&lr=lang_ja

ironika
質問者

お礼

ありがとうございます。見事解決できました。 本当にありがとうございました。

その他の回答 (1)

  • perse
  • ベストアンサー率74% (113/152)
回答No.1

再生させたいポイントが5つあって それをランダムで選んで再生させたいということですか? 再生させたいポイントが1,40,80,120,160フレーム目だとすると //0-4の乱数 var rnd = Math.floor(Math.random()*5); var point = 40*rnd; if (rnd == 0) point = 1; this.gotoAndPlay(point) //-------------------------------------- またはフレームラベルを利用して (各ポイントにp0,p1,p2,p3,p4とフレームラベルをつけます) //0-4の乱数 var rnd = Math.floor(Math.random()*5); var lbl = "p"+rnd this.gotoAndPlay(lbl)

ironika
質問者

補足

早速のご回答ありがとうございます。 申しわけありませんが、もう少しだけ教えてください。 labelというレイヤーを作って、スタートさせたい5点にフレームラベルを付けました。また、asというレイヤーを作って、1フレーム目に、お教え頂いたActionScriptを記入しました。しかし、いつも1つ目のバナーから始まってしまいます。 記入の方法が間違っているのでしょうか。 宜しくお願い致します。

関連するQ&A

専門家に質問してみよう