- ベストアンサー
時間毎に変わるメニュー
いまFLASHでメインメニューを作っているんですが、例えば朝、昼、夕方、夜で背景とかメッセージを時間毎に変えるにはどうすればいいのでしょうか? よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
背景を変える方法は無数にありすぎますし, 作る物によって方法を変えなければなりませんから, それは考えていただくとして…, まず,そのFlashファイルを見たときによって, 表示されるメッセージを変える一例を回答します。 それと,お持ちの Flash のバージョンを書かれていませんので, 勝手に Flash MX 以降(Flash MX ,MX 2004,8) をお持ちとして回答します。 まず,新規ドキュメントを作成して, メッセージを表示する ダイナミックテキスト の テキストフィールド をステージ上に用意します。 左上の「A」ボタン(テキストツール)をクリックして, 下のプロパティインスペクタ(プロパティパネル)を表示させ,左の方で, A [ダイナミックテキスト▼] として,真ん中の文字の色は黒など背景色とは違う色を選択してください。 そして,ステージ上の任意の場所をクリックすると,勝手に テキストフィールド ができると思います。 そして,その テキストフィールド にインスタンス名を付けてください。 この説明では「myMessage」というインスタンス名にしておきます。 プロパティインスペクタ(プロパティパネル)を図示すると次のような感じになります。 A [ダイナミックテキスト▼] [myMessage ] この時点で, レイヤーは1つのはずですから,レイヤーを1つ追加します。 オブジェクトはオブジェクト,スクリプトはスクリプト,とレイヤーを分けた方が都合が良いためです。 タイムラインを図示すると次のような感じになります。 1 □ レイヤー2 筆・・|○| ←スクリプト用レイヤー □ レイヤー1 筆・・|●| ←テキストフィールド さて,スクリプトですが, 時刻を取得して,その時刻によって表示させるテキストを変えるという流れです。 次のスクリプトを, スクリプト専用レイヤーとして作ったレイヤーのフレーム1を選択し, 下のアクションパネルのスクリプトを書く白い部分に書けば(コピペすれば)OKです。 ------------------------------- // 時刻オブジェクトの作成 var myDate = new Date(); // 時刻オブジェクトから時刻(何時?)を取得 var myHour = myDate.getHours(); // もし 19時以降 または 7時前だったら if (myHour>=19 || myHour<7) { _root.myMessage.text = "夜です。寝てます。"; // もし 7時以降 なおかつ 12時前だったら } else if (myHour>=7 && myHour<12) { _root.myMessage.text = "朝です。まだ眠たいです。"; // もし 12時以降 なおかつ 16時前だったら } else if (myHour>=12 && myHour<16) { _root.myMessage.text = "昼です。昼寝の時間です。"; // もし 16時以降 なおかつ 19時前だったら } else if (myHour>=16 && myHour<19) { _root.myMessage.text = "夕方です。早く寝ましょう。"; } ------------------------------- これで,任意の名前を付けて任意の場所に保存し, 「ファイル」→「パブリッシュ」すれば,SWFがパブリッシュされ, そのSWFファイルを見たときによって,表示されるメッセージを変わるものができます。 テキストフィールド の大きさは調節してください。 また, テキストフィールド の設定を「複数行」にして, _root.myMessage.text = "夕方です。\n早く寝ましょう。"; のように 「\n」 を入れるとそこで改行します。 さらにまた,時刻に関してですが, Flash の場合,時刻は表示されているローカルPCの時刻を取得して表示します。 PCの時刻を色々変えるとメッセージが色々変わるかどうかが実験できます。 参考URL 「Date クラス」 http://www.1art.jp/flash/le/lesson37/lesson37.htm 「if ステートメント」 http://www.1art.jp/flash/le/lesson23/lesson23.htm ////////////////////////////////////////////////////// 背景を変える方法は無数にありますが, スクリプト的に言えば,上記, _root.myMessage.text = "夜です。寝てます。"; の各部分を変えれば良いだけです。 例えば,一番下のレイヤーに, 「朝・昼・夕・夜」用の絵が書くフレームに入ったムービークリップを用意して, そのムービークリップのフレームを gotoAndStop(); させても良いですね。 _root のタイムラインを図示すると次のような感じになります。 1 □ レイヤー2 筆・・|○| ←スクリプト用レイヤー ~ 略 ~ ~ 略 ~ □ レイヤー1 筆・・|●| ←「朝・昼・夕・夜」ムービークリップ 「朝・昼・夕・夜」ムービークリップ内のタイムラインを図示すると次のような感じになります。 1 5 □ レイヤー1 筆・・|○|●|●|●|●| ↑ ↑ ↑ ↑ ↑ stop(); 朝 昼 夕 夜 そして,ムービーの編集に戻り その「朝・昼・夕・夜」ムービークリップにインスタンス名を付けます。 ここでは,「myBack」 というインスタンス名にしておきます。 そして, _root の フレーム1 には,次のようなスクリプトを書くことになります。 ------------------------------- // 時刻オブジェクトの作成 var myDate = new Date(); // 時刻オブジェクトから時刻(何時?)を取得 var myHour = myDate.getHours(); // もし 19時以降 または 7時前だったら if (myHour>=19 || myHour<7) { _root.myBack.gotoAndStop(5); // もし 7時以降 なおかつ 12時前だったら } else if (myHour>=7 && myHour<12) { _root.myBack.gotoAndStop(2); // もし 12時以降 なおかつ 16時前だったら } else if (myHour>=12 && myHour<16) { _root.myBack.gotoAndStop(3); // もし 16時以降 なおかつ 19時前だったら } else if (myHour>=16 && myHour<19) { _root.myBack.gotoAndStop(4); } ------------------------------- 上記例では ムービークリップ を背景にしましたが, 別に _toot(メインムービー) の背景を変えても良いですし, 時刻によってロードする 外部JPEG や 外部SWF を変えても良いですし, スクリプトでムービークリップの色を変えることもできますし… と,様々です。 好きな方法を取ってください。 また,メッセージも,ダイナミックテキストのような淡々とした文字で用意するのではなく, ロゴみたいな絵にしておいてムービークリップの中に入れて, そのムービークリップのフレームを gotoAndStop(); させる方法もありますね。 とにかくその辺は,好きな方法を取ってください。 ※ なお Flash 5 では, テキストフィールド にインスタンス名を付けられません。 最初の スクリプト の場合,テキストフィールド には, 「myMessage」というインスタンス名ではなく変数名を付け _root.myMessage = "夜です。寝てます。"; のように各部分を変更してください。 つまり, .text を取ってください。 そうすれば Flash 5 でも使えます。 ※ Flash 4 以下ではないと思うのでそれ以下は省略 (Flash 4 でもできなくはないですが非常に難しい。 基本的にできないと思った方が良いです。)
お礼
さっそく回答いただいたのに返事送れてすいません。。 すごく詳細な内容ありがとうございます。申し訳ないです。