- ベストアンサー
Flash Lite 1.1の時計について
Flash Lite 1.1でデジタル時計を作っているのですが、ほかの方々の作品を見てみると、時計の数字が面白い形になっています。(雲のような丸こい形とか、カクカクした形とか。)自分はそのやり方がわかりません。どうやったらそのような面白い形にすることができるのでしょうか?また、時間によって背景を変えるようにするにはどのようにすればよいのでしょうか?これらは何かアクションスプリクトが必要のなのでしょうか?どうかよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
携帯を持っていない者です。 以下に一応成功した例を書いておきますが, 成功したと言っても,検証は Flash Professional 8 の Flash Lite 1.1 でのムービープレビュー(携帯表示)しかしていません。 実際に携帯で動作するかどうかはわかりませんので,あらかじめご了承ください。 おおむねここの1ページだけを参考に作ってみました。 http://www.manpukuu.com/blog/archives/2004/12/flash_lite_11_1.html まず,好きな(面白い?)フォントで数字の 0 をステージ上に書きます。 それを選択し,右クリック→シンボルに変換 でムービークリップシンボルにします。 次にそのムービークリップシンボルの編集に入ります。 ムービークリップ内のフレームを10フレームにしてください。 そして,全てのフレームをキーフレームに変換します。 1 5 10 □ レイヤー 筆・・|●|●|●|●|●|●|●|●|●|●| これで,全てのフレームに 0 というテキストが入った状態です。 そして, フレーム2 の 0 を 1 に,フレーム3 の 0 を 2 に,… フレーム10 の 0 を 9 にそれぞれ書きかえます。 フレーム数と数字が1つずつずれた感じです。 そして, 0 ~ 9 までのテキストを 「修正」→「分解」で分解してください。 そのままの状態だと,好きなフォントを使ってもみんなデフォルトのフォントに変換されてしまうようです。 以上で,文字の部分の作成は終わりです。 「編集」→「ドキュメントの編集」でメインムービーの編集に戻ります。 そして今作ったムービークリップ(最初の 0 だけが表示されているはず)を, 5つコピーで増やし,合計6個にします。 そしてその6つを横1列に2つずつペアになる感じでステージ上に並べてください。 0 0 0 0 0 0 というような感じです。 そして,左の 0 から順にインスタンス名を付けます。 まず一番左の 0 を選択して,下のプロパティパネルより, 左の方の <インスタンス名> となっていて入力できるようになっている部分に, h1 と書きます。これで,h1というインスタンス名がそのムービークリップにつきます。 次に左から2番目に h2 と付けてください。 左から3番目は m1 4番目は m2。 左から5番目は s1 6番目(一番右)は s2 です。 これで文字表示部分の完成です。 現在,メインムービーのタイムラインは, 1フレーム 1レイヤー しかないと思います。 これを 2レイヤーにしてください。 上のレイヤーをスクリプト専用レイヤーにします。 そして,上のレイヤーに以下のようなスクリプトを書きます(コピペ可)。 -------------------------------------- //時刻を変数 hour にセット hour = fscommand2("GetTimeHours"); //分を変数 minu にセット minu = fscommand2("GetTimeMinutes"); //秒を変数 sec にセット sec = fscommand2("GetTimeSeconds"); //9時までの h1 と h2 の表示フレーム if (_root.hour<10) { tellTarget ("h1") { gotoAndStop(1); } tellTarget ("h2") { gotoAndStop(_root.hour+1); } //10時以降の h1 と h2 の表示フレーム } else { tellTarget ("h1") { gotoAndStop(substring(_root.hour, 1, 1)+1); } tellTarget ("h2") { gotoAndStop(substring(_root.hour, 2, 1)+1); } } //9分までの m1 と m2 の表示フレーム if (_root.minu<10) { tellTarget ("m1") { gotoAndStop(1); } tellTarget ("m2") { gotoAndStop(_root.minu+1); } //10分以降の m1 と m2 の表示フレーム } else { tellTarget ("m1") { gotoAndStop(substring(_root.minu, 1, 1)+1); } tellTarget ("m2") { gotoAndStop(substring(_root.minu, 2, 1)+1); } } //9秒までの s1 と s2 の表示フレーム if (_root.sec<10) { tellTarget ("s1") { gotoAndStop(1); } tellTarget ("s2") { gotoAndStop(_root.sec+1); } //10秒以降の s1 と s2 の表示フレーム } else { tellTarget ("s1") { gotoAndStop(substring(_root.sec, 1, 1)+1); } tellTarget ("s2") { gotoAndStop(substring(_root.sec, 2, 1)+1); } } -------------------------------------- やたら長いですね,もっとシンプルにまとめる方法はないものかとは自分でも思いますが, 長い分わかりやすいとは思います。 上記参考URLでは,分に変数 min を使用していますが, min (Math.min メソッド) の min と重なるためよろしくないです。 だからこの例では,分の変数名を minu にしてあります。 そして,メインムービーのフレームを2フレームにします。 stop(); を書かなければ,勝手にループしますから, フレーム1に戻るたびに上記スクリプトが実行され,リアルタイムの時計になります。 結局,PCでも携帯でもやりかたは同じです。 数字にしたがって,画像を変えるしかないです。 やりかたは同じですが, クラスとかいうものの定義がないので,スクリプトが変わるだけです。 PCの場合は, _root.h2.gotoAndStop(_root.hour+1); の1行で済むところが,ムービークリップにはいちいち tellTarget で命令をしないとならないので, tellTarget ("h2") { gotoAndStop(_root.hour+1); } のようになるだけです。 また,onEnterFrame (MovieClip.onEnterFrame ハンドラ) のようなものも存在しないので, フレームをループさせて何度も同じスクリプトを実行させます。 >> また、時間によって背景を変えるようにするにはどのようにすればよいのでしょうか? 上記例と同様の考え方で行けますね。 時刻によって if文 で分岐して,背景ムービークリップに tellTarget すれば良いと思います。 ========================= しかし,こんなに長いスクリプトを携帯がうまく処理できるのかはわかりません。 また,数字を1桁ずつでペアにするのではなく, 2桁 にすれば,スクリプトは分岐もなくなりもっともっと短くできますが, 1~60までの数字を用意すると容量が増えてしまします。 本当に携帯ではどうなるかわかりません。だから全く「自信なし」です。 でも大筋は上記のような方法だと思います。
その他の回答 (1)
- perse
- ベストアンサー率74% (113/152)
数字が面白い形になっているのは (1)埋め込みフォントを使用しているか、 (2)0~9までをMCに記述し、gotoAndStop()等で表示していると思います。 例えば 1フレーム目に1 2フレーム目に2 … 10フレーム目に0の画像を用意しておいて 取得した時間をifかswitchで場合わけして 1時のときはgotoAndStop(1)で「1」の画像を表示させ 2時のときはgotoAndStop(2)で「2」の画像を表示させます。 時間によって背景を変えるようにするには 背景をMCに入れといて上の(2)と同じ方法でいけるかと。 といいつつも実際に試してないのでほんとにできるかどうかはわかりません。
お礼
ありがとうございます!今日早速試してみます!
お礼
とても長い解説ありがとうございます!さっそく今から試してみます!