• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクションスクリプトについて質問です。 )

アクションスクリプトで曜日毎にフレーム内容を表示する方法

このQ&Aのポイント
  • アクションスクリプトを使用して、曜日を取得し、その曜日のフレーム内容を表示したいと考えています。
  • アクションスクリプトのコードを試してみましたが、データは表示されるものの、最初にsunの曜日が表示されてしまいます。
  • ブラウザの更新をかけないと、曜日ごとのフレームの内容が表示されない状態になります。修正方法を教えてください。

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

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

Flashは,メモリにロードされるはしから表示可能フレームになって, 設定フレームレート(fps)にしたがって,もし表示可能であれば表示します。 逆に言えば,まだメモリにロード(ダウンロード)されていないフレームは表示不可能です(当たり前といえば当たり前です)。 こういう再生方法をかつては「ストリーミング再生」などと言っていましたが, この言葉は「ストリーミング配信」などと混同されることが多いためか, 最近は「プログレッシブ再生」と呼ばれます。 例えば今日が 月曜日 であったとします。 その場合,書かれていらっしゃるスクリプトが実行されるやいなや, Flash Player はいきなりフレームラベル「mon」にジャンプを試みます。 そのとき, もしその フレームラベル「mon」 のフレームがメモリに未ロードであれば, 表示できないので途中で墜落してしまいます。 > ブラウザの更新をかけないと、 > その曜日のフレームの内容が表示されません。 どちらかと言えば, この「ブラウザの更新をかけると正常に動作してしまう」という方が異常だと思ってください。 おそらく, ブラウザの更新をかけると ブラウザのキャッシュ(またはまだメモリ上にある)以前にロードしたSWFファイルを参照するため, 瞬時にSWFのロードが完了して目的フレームが表示されるのではないかと思います。 簡易的には次のようにすれば,大丈夫だと思います。 =============================================== // とりあえずこのフレームで停止 stop(); // 1フレーム進む時間ごとに毎回実行する関数を定義 this.onEnterFrame = function() { // もしロード済みフレーム数が全フレーム数に達すれば if( this._framesloaded >= this._totalframes ){ // ---↓以下書かれていらっしゃるスクリプト↓--- myDate = new Date(); myDay = myDate.getDay(); if (myDay == 0) { gotoAndStop("sun"); } else if (myDay == 1) { gotoAndStop("mon"); } else if (myDay == 2) { gotoAndStop("tue"); } else if (myDay == 3) { gotoAndStop("wed"); } else if (myDay == 4) { gotoAndStop("thu"); } else if (myDay == 5) { gotoAndStop("fri"); } else if (myDay == 6) { gotoAndStop("sat"); } // ---↑以上書かれていらっしゃるスクリプト↑--- // この onEnterFrame を削除 delete this.onEnterFrame; } }; =============================================== この「ロード済みフレーム数が全フレーム数に達する」まで, 静止している(または真っ白な)Flash画面を表示させるのを防止するために, いわゆるよく見る「Now Loading...」 のようなものがあるのです。 上のは簡易的なものですから, 「Now Loading...」のようなプリローダは付けていません。 もしそのようなものを付ける場合は, それはそれで検索したり研究する方がいいと思います。 検索例↓ Google「flash プリローダー」 http://www.google.co.jp/search?hl=ja&source=hp&q=flash+%E3%83%97%E3%83%AA%E3%83%AD%E3%83%BC%E3%83%80%E3%83%BC ※ プリローダ のようなものが作れるのも   メモリにロードされるはしから表示されるという   Flash の仕様のおかげです。   もし全フレームロードするまで表示されない仕様だと   プリローダ さえ表示されないということになりますよね。

mytti
質問者

お礼

このたびはありがとうございました! 教えいただきましたアクションスクリプト問題なく動作しました。 根本的な解決は、教えていただきました内容をさらに 検証して自分でも間違いなく描いていけることだと思います。 もっとがんばって勉強します。 本当に助かりました。 これからもよろしくお願いします。

関連するQ&A