• ベストアンサー

Flashのactionscriptについて(画像の時間指定切り替え)

はじめて質問します。 Javascriptのように、1ヶ月ごとに画像の切り替えをFlashでしたいと思っています。 もし可能であれば、シーンを12ヶ月分作って、月ごとに最後だけシーンを切り替えたいです。 そういうactionscriptはあるのでしょうか。。。 すみませんが、よろしくお願いいたします。

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

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

「最後だけシーンを切り替える」 という部分が,Scriptのメイン部分になるため,非常に答えにくいです。 どういう風にされたいのかがわからないので,例として月によってgotoするフレームを変えるスクリプトを書きます。 基本はJavaScriptと全く変わりません。 使っている関数や構文も全く同じです。 ただ,Flashを動作させる部分がかわるだけです。 「Javascriptの条件文」 http://www.rsch.tuis.ac.jp/~mizutani/online/javascript/condition.html まずは,月の取得ですが,これはこの2行だけで良いです。 ------------------------------ // 新しい Date オブジェクトを作成する myDate = new Date(); //変数 tuki にDate オブジェクトの月+1 を取得 tuki = myDate.getMonth()+1; ----------------------------- getMonth()+1 にしていますが, 1月だと0,2月だと1… という具合になるので紛らわしくないようにこの段階で+1をしただけです。 単なる私の趣味です。 JavaScript と同じく変数だとわかりやすいように前に var を付けて ----------------------------- var myDate = new Date(); var tuki = myDate.getMonth()+1; ----------------------------- のようにしてもかまいません。 次にこの得られた tuki の値によって,if文で分岐させます。 1月だったら31フレームに,2月だったら41フレームに… というのをスクリプトにすると以下に様になります。 --------------------------- myDate = new Date(); tuki = myDate.getMonth()+1; if (tuki == 1) { gotoAndPlay (31); } else if (tuki == 2) { gotoAndPlay (41); } else if (tuki == 3) { gotoAndPlay (51); } else if (tuki == 4) { gotoAndPlay (61); } else if (tuki == 5) { gotoAndPlay (71); } else if (tuki == 6) { gotoAndPlay (81); } else if (tuki == 7) { gotoAndPlay (91); } else if (tuki == 8) { gotoAndPlay (101); } else if (tuki == 9) { gotoAndPlay (111); } else if (tuki == 10) { gotoAndPlay (121); } else if (tuki == 11) { gotoAndPlay (131); } else { gotoAndPlay (141); } ---------------------------- 上に書いたURLをもう一度見直してみるとわかりますが, 「Javascriptの条件文」 http://www.rsch.tuis.ac.jp/~mizutani/online/javascript/condition.html 同じですね。 gotoAndPlay (○○); とか言うFlash特有な部分が挟まっているだけです。 これを,タイムラインの月ごとに進みたいフレームに書けば, そのフレームに達したとき目的のフレームに自動的にジャンプします。 しかし,上のように規則正しい法則にしたがって, goto するフレームを変える場合は,if文の分岐も要りません。 上のスクリプトはよく見ると, tuki=1 のとき 31(フレーム) tuki=2 のとき 41(フレーム) tuki=3 のとき 51(フレーム)  …         … tuki=n のとき n×10+21(フレーム) となっているのがわかります。 if文だとたいていの分岐に対応できます。 でもif文だとダラダラ長くて,格好が悪いですし,PCの頭も余分に使ってしまいます。 ですから上のような場合,普通は, ----------------------------- myDate = new Date(); tuki=myDate.getMonth()+1; gotoAndPlay(tuki*10+21); ----------------------------- と書きます。 これの方がスッキリしていて良いですね。たった3行になります。 上記参考URLにはないですが,こういう方法は当然JavaScriptでも他の言語でも使います。 最後のシーンはいったいどうしたいのかによって, gotoAndPlay (○○); の部分が変わります。 loadMovie を使って他のムービーを読み込むとか, ○○.play(); で,インスタンス名○○のムービークリップをスタートさせるとか, 様々です。 とりあえずは if文を使う形で考えてみて,もし公式化できそうだったら, if文ではなく,短縮することも考えてみてください。 この月の値はローカルPCの時刻を取得しています。 PCの日付と時刻の調整で月を変えてもらうと,本当にスクリプトはうまく動作するのかが確認出来ます。 ===雑談========================= Flashのスクリプトは ActionScript と呼ばれています。 こう呼ばれるようになったのは,日本ではFlash5(2000年10月13日発売)からです。 それまでは正式にはそう呼ばれていなくて,単にアクションと呼ばれていました。 よく考えると旧世紀の話ですね。 アクションと呼ばれていた頃のスクリプトは,JavaScript とは全く似ていないもので,VBA とか VBScript に似た感じの言語でした。 例えば If は End If で閉じていました。 On も End On で閉じていました。 ところが,それまでとは全く違う,ActionScript という言語を,マクロメディアが JavaScript の標準規格である ECMAScript をベースに独自に作り,Flash5からその言語形式を採用したのです。 http://www.fumiononaka.com/TechNotes/Flash/FN0506003.html だから ActionScript は JavaScript の弟か子どものようなものです。 JavaScript をされている方は,スルスルと ActionScript が理解できると思います。 私は逆に ActionScript をすることによって JavaScript が少しわかるようになりました。 歴史的にも JavaScript の方が古く,使用人口でも JavaScript の方が多いので,考え方や応用の仕方も JavaScript から得る物は多いです。

delico10
質問者

お礼

詳しい説明ありがとうございます!!! 返事が遅くなり申し訳ございませんでした。 何とかうまくいきました…!!! 本当に本当にありがとうございました。

その他の回答 (1)

回答No.1

こんにちは。 作っていないので細かいことはわかりませんが、私がご質問のようなものを作ると想定して・・・。 1、月ごとの最後のシーンを12個別ファイルで作ります。 2、各月で共通している動きのファイルを作ります。 3、2で作ったファイルで一番最後に現在の月を読み込み その月に合った外部swfファイルを読み込む 大体こんな手順で作ることができると思います。 問題になるのは、現在の月なのですが、これは、何か関数があると思います(無責任^^) 後は、それをifがswich(スペル自信なし)で条件分岐してやれば、 できます。 簡単にですが,頑張って下さい。

delico10
質問者

お礼

ありがとうございました。 返事が遅くなり申し訳ございませんでした。 シーンで切り替えがちょっとうまく行かず、レイヤーで12か月分区切って作りました。。。 返答、本当にありがとうございました。

関連するQ&A