- 締切済み
FLASHで20分のカウントダウンタイマーを作りたいのですが。。。
はじめて投稿します。 FLASHで20分のカウントダウンタイマーを作りたいのですが、うまくいかずに悩んでいます。。。 20分後にTIMEOVER!の文字も表示したいのです。。 何かヒントでも頂ければ、うれしいです。宜しくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
20分のカウントダウン自体は,目標の時間から,経過時間を引けば良いだけですから, 経過時間の算出さえできれば簡単だとは思います。 目標時間が 10秒だとすると, 表示時間 = 目標時間-経過時間 表示時間 = 10-1 (= 9) 表示時間 = 10-2 (= 8) 表示時間 = 10-3 (= 7) 表示時間 = 10-4 (= 6) 表示時間 = 10-5 (= 5) 表示時間 = 10-6 (= 4) 表示時間 = 10-7 (= 3) 表示時間 = 10-8 (= 2) 表示時間 = 10-9 (= 1) 表示時間 = 10-10 (= "TIMEOVER!") ということです。 でもしかし,問題なのは 「カウントダウン自体」 ではなく 「その表示のさせ方」 だと思います。 どのような感じで表示させようと考えていらっしゃるのでしょうか? 例えば 「カウントダウン数をミリ秒単位に表示させる。」 「カウントダウン数を単位に表示させる。」 「カウントダウン数を分+秒単位に表示させる。」 … など … など … また表示させるルールも問題です。 「Flash が表示されてからのカウントダウン」 「ボタンがクリックされてからのカウントダウン」 「カウントダウンする秒数は閲覧者が決める」 「カウントダウンする秒数は作成者が決める」 … など … など … 最初に書きました通り,カウントダウン数は単純に「目標時間-経過時間」で引き算してください。 それ以外の部分によってそれ以外の答えは変わりますし, 考えるポイント,つまり難しい点も,それ以外の部分が大半になるはずです。 ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ というわけでたくさんのものを回答できませんので,一例のみを回答いたします。 まず,ステージ上に,ボーダー(周囲の枠線)付きの横長めのダイナミックテキストを作成します。 また,ダイナミックテキストのインスタンス名を 「TM」 としたことにしておきます。 そのインスタンス名 「TM」 のダイナミックテキストをムービークリップに変換します。 そのムービークリップ自体に次のように書きます。 // このムービークリップが表示されたとき onClipEvent (load) { // カウントダウン数の設定 (※1) //( 20分(20×60×1000ミリ秒) ) cnt = 20*60*1000; // _root のフラグ用変数 cnt_flg を false にしておく _root.cnt_flg = false; } // 毎フレーム時間で随時実行 onClipEvent (enterFrame) { // _root の変数 cnt_flg が true であれば if (_root.cnt_flg) { // カウントダウン数を変数 ms に代入(ミリ秒) (※2) ms = cnt-(getTimer()-_root.my_time); // 分の算出 m = Math.floor(ms/60/1000); // 秒の算出 s = Math.floor(ms/1000)-m*60; // カウントダウン数を TM に表示 if (ms>=0) { this.TM.text = "あと "+m+"分 "+s+"秒"; } else { this.TM.text = "TIMEOVER!"; } } } // このムービークリップをクリックしたとき (※3) on (release) { // _root の変数 flg が false であれば if (!_root.cnt_flg) { _root.cnt_flg = true; // _root の変数 my_time に時間を代入 _root.my_time = getTimer(); } } これで,「テキストフィールド入りムービークリップをクリックしたとき」, カウントダウン表示が始まるものができます。 ※1 の部分について 一応20分にしています。 20分は 20×60=1200秒 1200秒は 1200×1000=1200000ミリ秒です。 その計算自体が面倒なので, 20*60*1000 と記入しています。 動作検証に 20分 もかけるのはいやだと思いますから, cnt = 1*60*1000; //←1分 とか cnt = 30*1000; //←30秒 くらいで実験すると良いと思います。 ※2 の部分について 本題はこの ※2 の行 ms = cnt-(getTimer()-_root.my_time); これだけです。 それ以外の大半の部分は, 「テキストフィールドをクリックした時にカウントダウン開始, 『あと ○分 ○秒』 という形のものを表示させる。」 というしくみを作成しているだけで, カウントダウン自体 とは関係がありません。 ※3 の部分について on (release) { } はムービークリップに書いています。 他のボタンをクリックしたときにカウントダウンを開始させる場合, この on (release) { } 文全てをそのボタンに移動させてください。 わざと _root の変数によって動作するしくみにしてありますから, どこに(どの階層に)ボタンやカウントダウンムービークリップを 持って行っても,おそらくそのまま使用できると思います。 また, お持ちのFlashのバージョンを書かれていませんので説明のしかたも良くわかりません。 バージョンがわからないので本当は Flash 5 でも作成可能なスクリプトやしくみを書きたかったのですが, Flash 5 では作成するものの構造説明がさらにややこしくなるため Flash MX 以上で作成可能なものにさせていただきました。 当たり前のことなのですが, 使用するバージョンが古いほど不可能なことが多くなるので, 同じものを作るにしても作成するスクリプトや構造が難しくなりますし,いくら努力しても不可能なことも出てきます。