• ベストアンサー

FLASHで開始コマをランダムにしたいです。

FLASHで開始コマをランダムにしたいです。 画像5枚が2,3秒づつで切り替わるバナーをFLASHで作りたいのですが、 ページに入る度に開始する画像をランダムにしたいんです。 (入るたびにバナーが変わるjavascriptのランダムバナーのように) いくつか指定したコマからランダムでスタートといった設定はできるのでしょうか? 確率も決められればベターです(これは特に重要ではないです)。 FLASH CS4を使用しています。お願いします。

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

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

書かれていらっしゃること自体は難しくはありません。 Math クラス の random() メソッド で 0以上1未満のランダムな数が得られます。 (0 <= ランダムな数 < 1) 例えば それで得られた数が 0.1 未満である確率は 10 % です。 それで得られた数が 0.7 以上である確率は 30 % です。 ですからフレーム1に,次のように書けば良いです。 ----------------- //変数 rnd_num に 0以上1未満 のランダムな数を代入 var rnd_num:Number = Math.random(); // 22% の確率で if (rnd_num < 22 / 100) { //フレーム2 から再生 gotoAndPlay(2); //23%の確率で } else if (rnd_num < 45/100) { //フレーム8 から再生 gotoAndPlay(8); //5%の確率で } else if (rnd_num < 50/100) { //フレーム11 から再生 gotoAndPlay(8); //残り50%の確率で } else { //フレーム19 から再生 gotoAndPlay(19); } ----------------- また,最終フレームのキーフレームには フレーム1 に戻ってしまわないように ------------- gotoAndPlay(2); ------------- と書いておけば良いです。 ※以上のスクリプトは   ActionScript 2.0 設定でも 3.0 設定でも使えます。 しかし Flash Player は SWF がメモリにロードされる端から再生するようにできています。 つまり 全てのフレーム がロードされる前, フレーム1 が表示されると同時に上のコードが実行されます。 したがって フレーム19 がまだロードされていない場合でも  //フレーム19 から再生  gotoAndPlay(19); が実行されてしまう可能性もあります。 そんなことになると Flash Player は フレーム19 など表示できないので 再生停止状態になるか途中のフレームで墜落してしまうということになります。 ですから 再生開始間もなくいきなり フレームジャンプ をする場合などは 「NowLoading...」 のようなロード待ちを入れる必要があります。 「NowLoading...」のような見た目の表現は全く抜きにしたとしても フレーム1 のスクリプトを次のように工夫する必要があります。 --------------- //再生停止 stop(); //イベントリスナーを登録 //(毎フレーム時間で実行,実行関数 goRnandom) this.addEventListener(Event.ENTER_FRAME,goRnandom); //関数 goRnandom の定義 function goRnandom(evt:Event):void { //変数 per にロードされたパーセントを取得 var per:Number = this.loaderInfo.bytesLoaded / this.loaderInfo.bytesTotal * 100; // //もしロードパーセンテージが 100 に達すれば if (per >= 100) { //登録したイベントリスナーを削除 this.removeEventListener(Event.ENTER_FRAME, goRnandom); //変数 rnd_num に 0以上1未満 のランダムな数を代入 var rnd_num:Number = Math.random(); // 22% の確率で if (rnd_num < 22 / 100) { //フレーム2 から再生 gotoAndPlay(2); //23%の確率で } else if (rnd_num < 45/100) { //フレーム8 から再生 gotoAndPlay(8); //5%の確率で } else if (rnd_num < 50/100) { //フレーム11 から再生 gotoAndPlay(8); //残り50%の確率で } else { //フレーム19 から再生 gotoAndPlay(19); } } } --------------- ※上のスクリプトは ActionScript 3.0 設定のみで使えます。

peco33
質問者

お礼

丁寧なご教授ありがとうございます。 試してみたいと思います。

関連するQ&A