- ベストアンサー
ActionScript 3.0で季節ごとに変化するスクリーンセーバーを制作する方法
- Flash Professional CS6を使用して作成しているスクリーンセーバーに、季節ごとの変化を加えたいです。具体的には、春、夏、秋、冬の各季節に合わせたアニメーションを表示したいです。
- 既に、桜、雨、緑葉、紅葉、雪のアニメーションは完成しており、それぞれ別々のflaファイルとして保存されています。これらを1つのファイルに統合し、ActionScript 3.0を使用して季節ごとに自動的に表示を切り替えるスクリプトを書きたいと考えています。
- 具体的なスクリプトの書き方や、時間の組み込み方法について教えていただけると幸いです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
もし Flash(SWFファイル) をネットにアップする場合でしたら その作成されているFlash(SWFファイル)自体の ロード待ち処理などを考えたりしなければならないため 下に書く方法が適切とは言えない場合も出てきますが スクリーンセーバーは基本的にローカルファイルですから 下に書くような方法で良いのではないかと思います。 まず,下に書く内容の大まかな骨子を書きますが 全体的には 「各季節(5季節)を別々のシーンに配置して 月によって再生させるシーンを変える。」 ということをすれば良いのではないかということです。 新規ドキュメントファイル(FLAファイル)を作成して そのドキュメント内に「桜」「雨」「緑葉」「紅葉」「雪」のアニメーションをつないで行くのですが そのときに各アニメーションをシーンごとに分けてコピペします。 新規ドキュメントを作成すると メインのタイムライン(の「シーン 1」)が見えるわけですが 「挿入」→「シーン」で「シーン 2」~「シーン 6」の5つのシーンを挿入します。 そして 「シーン 2」のタイムラインには「桜」 「シーン 3」のタイムラインには「雨」 「シーン 4」のタイムラインには「緑葉」 「シーン 5」のタイムラインには「紅葉」 「シーン 6」のタイムラインには「雪」 の各タイムラインをコピペします。 ドキュメントファイル内でのシーン移動は ステージの上にあるバーの右の方にある 「ガチンコ」アイコンをクリックすればできると思います。 アニメーションのコピペは 作成した各アニメーションのタイムラインの全てのレイヤーとフレームをドラッグで選択して 右クリックなどより「フレームをコピー」を選択し ペーストしたいシーンのフレーム1を選択して 右クリックなどより「フレームをペースト」を選択すればできると思います。 ・参考↓ 「アニメーション作成の手抜きテクニック:ITpro」 http://itpro.nikkeibp.co.jp/article/COLUMN/20060705/242544/ →「フレーム全体をコピーする」の項目 各アニメーションFLAに シンボル名が同じシンボルがあると コピペするときに厄介なことが起こって困るので 各アニメーションFLAのシンボル名は違うものにしておいた方が良いと思います。 (例:「桜シンボル1」,「紅葉シンボル1」など) そして 何も配置していない 「シーン 1」のフレーム1を選択して 次のようなスクリプトを書きます。 //---------------------------------------------- //今現在の Date インスタンス my_tade を作成 var my_date:Date = new Date(); //my_date から 月番号(0~11) を取得 var month_num:int = my_date.getMonth(); //もし月番号が2~4であれば(3~5月であれば) if (month_num >= 2 && month_num <= 4) { //シーン 2 の フレーム1 から再生 gotoAndPlay(1,"シーン 2"); //もし月番号が5であれば(6月であれば) } else if (month_num == 5) { //シーン 3 の フレーム1 から再生 gotoAndPlay(1,"シーン 3"); //もし月番号が6または7であれば(7または8月であれば) } else if (month_num == 6 || month_num == 7) { //シーン 4 の フレーム1 から再生 gotoAndPlay(1,"シーン 4"); //もし月番号が8~10であれば(9~11月であれば) } else if (month_num >= 8 && month_num <= 10) { //シーン 5 の フレーム1 から再生 gotoAndPlay(1,"シーン 5"); //もし月番号が上記以外であれば(12または1または2月であれば) } else { //シーン 6 の フレーム1 から再生 gotoAndPlay(1,"シーン 6"); } //---------------------------------------------- これで 月によって違うシーンの冒頭にジャンプするようになります。 しかしこれだけでは ムービー全体がループ再生されてしまうので 各シーンの最終フレームにキーフレームを作って 次のように書いて行きます。 //---「シーン 2」の最終フレーム--------- //シーン 2 の フレーム1 から再生 gotoAndPlay(1,"シーン 2"); //-------------------------------------- //---「シーン 3」の最終フレーム--------- //シーン 3 の フレーム1 から再生 gotoAndPlay(1,"シーン 3"); //-------------------------------------- 他のシーンの最終フレームも同様に…。 ========================== 結局のところ, new Date() で Date インスタンスを作成して getMonth() メソッド で月番号を取得し その月番号によって動作を変えれば良いのです。 シーンを使うと そんなに難しい知識は要りませんし説明も簡単であるため 各季節のアニメーションを各シーンに用意する方法を書きましたが 別にシーンを使わなくても良いのです。 例えば 5つの ムービークリップを用意して そのムービークリップ内のタイムラインに 各季節のアニメーションを用意して 月番号によって表示させるムービークリップを変えても良いわけです。 もしそういう方法を使うとすれば インスタンス名とか階層とか場合によってはクラスとか そういうものの概念などの理解も必要になってきたり 説明も難しくなってくるのでシーンで説明しただけです。 余裕があったり, 違うものを作る機会があれば, 色々な方法を考えてチャレンジしてみるのも良いかもしれません。