• ベストアンサー

デジタル時計のプログラムについて

はじめまして。 FLASH初心者で、参考書片手に勉強しております。 デジタル時計をホームページに載せたいと思いまして、作ってみたのですが、プレビューで確認しても実際サーバーにアップロードしてみても文字が表示されなく困っております。 dispTimeというダイナミックテキストに時刻を表示させたく、アクションのレイヤーに以下を記述してみました。 _root.dispTime.onEnterFrame = function(){ now_date = new Date(); h = now_date.getHours(); m = now_date.getMinutes(); s = now_date.getSeconds(); _root.dispTime = h + ":" + m+ ":" +s; }; 環境は、WinXP home SP2、FLASH8です。間違っていそうな箇所がありましたら、ご教授宜しく御願い致します。

  • Flash
  • 回答数7
  • ありがとう数33

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.6

○○.onEnterFrame = function(){ }; は,ムービークリップクラス(ムービークリップオブジェクトに対する)イベントハンドラメソッドです。 したがって ○○ はムービークリップであるべきです。 _root も 広義の ムービークリップなので,他のものとかぶりさえしなければ, _root.onEnterFrame = function(){ }; でも this.onEnterFrame = function(){ }; でもかまいません。 次に _root.dispTime の dispTime が何者であるかが問題です。 dispTime がダイナミックテキストに付けた "インスタンス名" であるとするならば, その dispTime の text プロパティに何か値を代入するという意味で, _root.dispTime.text = h + ":" + m+ ":" +s; にしなければなりません。 インスタンスは様々なプロパティのかたまりですから, _root.dispTime = ○○; のように書いても, その dispTimeインスタンス の何を ○○ にするのかわかりません。 dispTimeインスタンスの x座標プロパティ を ○○ にしたいのであれば, _root.dispTime._x = ○○; dispTimeインスタンスの 横幅プロパティ を ○○ にしたいのであれば, _root.dispTime._width = ○○; などなど,何かプロパティを指示する必要があります。 つまり, dispTimeインスタンスの 表示テキストプロパティ を ○○ にしたいのであれば, _root.dispTime.text = ○○; とする必要がありますということです。 全文を通すと次のようになります。 _root.onEnterFrame = function(){ now_date = new Date(); h = now_date.getHours(); m = now_date.getMinutes(); s = now_date.getSeconds(); _root.dispTime.text = h + ":" + m+ ":" +s; }; あと, 厳密な話で,話がややこしくなるため,あまり書きたくはないのですが, onEnterFrame はそれを定義したフレームでは実行されません。 onEnterFrame を定義した次のフレームに入るとき(フレームにエンターするとき)以降にずっと実行されます。 パッと見た瞬間から実行させたい場合は, 次のようにする必要があります。 _root.onEnterFrame = function() { now_date = new Date(); h = now_date.getHours(); m = now_date.getMinutes(); s = now_date.getSeconds(); _root.dispTime.text = h+":"+m+":"+s; }; // _root.onEnterFrame をこのフレームでも即実行 _root.onEnterFrame(); 気にならないようでしたら, 今ここ↑で書いた 即実行 の件はあまり考えなくて良いと思います。 ========================= なお, テキストフィールドに変数名を付けることはできますが, Flash MX 以上 で,FlashPlayer6 以上用の SWF をパブリッシュする際は非推奨事項になっています。 「テキストフィールドのインスタンス名と変数名について」 http://livedocs.adobe.com/flash/8_jp/main/00001418.html つまり簡単に言えば, テキストフィールドに変数名を付けるのは Flash 5 までの古い方法で, 一般的に今現在,ギリギリ現存する使用しなければならない状況で言えば, FlashLite1.0 もしくは 1.1 用の SWF(FlashPlayer4レベル)をパブリッシュするときくらいです。 紛らわしいので使わない方が良いです。 さらになお, FlashPlayer7以上用の SWF をパブリッシュするときは, 大文字小文字の区別が厳格にされます。 たとえば This と this は別物として扱われますので要注意です。

cory1379
質問者

お礼

ご回答ありがとうございます。 アドバイス通りのアクションスクリプトで無事デジタル時計が機能し、文字もしっかり見えました!! ご指摘の >dispTimeインスタンスの 表示テキストプロパティ を ○○ にしたいのであれば, >_root.dispTime.text = ○○; >とする必要がありますということです。 この箇所が自分の中でよく分からないままでいました。 確かに、インスタンスの何をどうするのかを明確に指示すべきであると改めて感じました。 後半の「テキストフィールドに変数名を付ける」が非推奨は、参考のサイトを読んでみましたが、正しく意図を理解できたかはちょっと不安でした。 今回でいう所の _root.dispTime.text = h+":"+m+":"+s; をvarから始まる形に変えるべきなのでしょうか。 とりあえず、本題の疑問は解消できましたので、満足しております。 どうもありがとうございました。

その他の回答 (6)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.7

#6 です。 > _root.dispTime.text = h+":"+m+":"+s; > をvarから始まる形に変えるべきなのでしょうか。 それはしようにもできないでしょう。 var はその階層内で変数やオブジェクトを宣言するときに使う物です。 あえてするとするなら,あまり意味はありませんが, var dispTime:TextField; のようにテキストフィールド を テキストフィールドインスタンス として _root に宣言する場合でしょうか。 しかし,現物のテキストフィールドは手動で作成してあるのであまり使いません。 使うべきなのは(使うべきものでもありませんが,ActionScript2.0 に忠実に従った場合使うとするなら), テキストフィールド の部分ではなくて,その前の now_date h や m や s だと思います。 now_date h m s は全体を通すと何のことかわかりますが,単独では何のことやらわかりません。 凝りたいとするなら,ここまでするかもしれません(あまりここまではしません)。 var dispTime:TextField; _root.onEnterFrame = function():Void { var now_date:Date = new Date(); var h:Number = now_date.getHours(); var m:Number = now_date.getMinutes(); var s:Number = now_date.getSeconds(); _root.dispTime.text = String(h)+":"+String(m)+":"+String(s); }; _root.onEnterFrame();

cory1379
質問者

お礼

最後の疑問も丁寧にご解説下さいまして、ありがとうございました。 厳密にすると咀嚼するのに時間がかかりますが、原理が分かればよりすっきりします。 初歩的な疑問も多々ありましたが、無事理解できました。

回答No.5

#1,2です。 デバイスフォントを使わずに、 アウトラインフォントを使えば表示できることがある様です。 もし外部フォントを使っているなら試してみてください。

cory1379
質問者

お礼

何度もアドバイスありがとうございます。 ダイナミックテキストのフォントを変えて「デバイスフォントの使用」や「アンチエイリアス」(埋め込み)などを試しているのですが、それでも一向に数字が表示されないんです。 こういう症状は他に原因があるのでしょうか。

  • suzuko
  • ベストアンサー率38% (1112/2922)
回答No.4

すみません。検証せずに書いていました。 _root.dispTime.onEnterFrame・・・ では確かに作動しませんね。^^; This.onEnterFrame = function(){ now_date = new Date(); h = now_date.getHours(); m = now_date.getMinutes(); s = now_date.getSeconds(); Time = h + ":" + m+ ":" +s; }; ならいけませんか?

cory1379
質問者

お礼

今度もそのまま貼り付けて試してみましたが、時刻の文字が表示されませんでした。 ダイナミックテキストで文字が表示されない理由として何かあるのかなと思って探しているのですが、改善できません。

  • suzuko
  • ベストアンサー率38% (1112/2922)
回答No.3

ダイナミックテキストのインスタンス名と変数を同じ「dispTime」にしているからではないですか? ダイナミックテキストのプロパティで変数を「Time」にして、 _root.dispTime.onEnterFrame = function(){ now_date = new Date(); h = now_date.getHours(); m = now_date.getMinutes(); s = now_date.getSeconds(); Time = h + ":" + m+ ":" +s; }; にされてはいかが?

cory1379
質問者

お礼

ご回答ありがとうございます。 ご指摘の通りに、ダイナミックテキストをTimeに名称変更して、アクションレイヤーにスクリプトを打ち込んだのですが、それでも表示されませんでした。 何が原因でひっかかっているのか・・。 普通ならば簡単にできるのだと思うのですが、困りました。

回答No.2

#1です。エラーが出ないということは記述に問題は無いと思います。 むしろダイナミックテキスト側のインスタンス名の設定か、 フレームがテキストよりも先になっている等の方が怪しいです。 短くした方では他に間違えようがないので、 名前を一度削除してコピー貼り付けなどで動くかもしれません。 ループはわかりやすくするために、 仮にフレーム側で設定した方がいいと思います。

cory1379
質問者

お礼

再びのご回答ありがとうございます。 名前は何度も確認して同じものになっています。 又、時刻が表示されるダイナミックテキストは何もないただ白の背景色があるものの上においていますし、最前面にしています。 静止テキストでは当たり前ですが、問題ないんです。

回答No.1

now_date = new Date(); h = now_date.getHours(); m = now_date.getMinutes(); s = now_date.getSeconds(); dispTime = h + ":" + m+ ":" +s; とりあえずアクションはこれだけで動くはずです。 _root.dispTime.onEnterFrame = function() の部分で何がしたいのか不明です。

cory1379
質問者

お礼

ご回答ありがとうございます。 ご指摘の通りにしてみましたら、やはり時刻の文字が表示されませんでした。 シンタックスエラーは出なかったのですが・・・。 >_root.dispTime.onEnterFrame = function() の部分で何がしたいのか不明です。 onEnterFrameでは、繰り返し処理をしたかったのです。 これがなくても問題ないのでしょうか。

関連するQ&A

  • 取得した時間の表示について。

    現在デジタル時計を表示しています。が この表示の形を変更したいのです。 //以下スクリプト var now:Date; var h:Number, m:Number, s:Number,l:Number,d:Number,o:Number,p:Number; this.onEnterFrame = function() { now = new Date(); d = now.getFullYear(); o = now.getUTCMonth()+1; p = now.getUTCDate(); h = now.getHours(); m = now.getMinutes(); s = now.getSeconds(); l = now.getMilliseconds(); date.text = d; mon.text =o; day.text =p; Hours.text = h; Minute.text = m; Seconds.text = s; mini.text = l; } // このスクリプトでは現在、静止テキスト"/" 、":"を挟み 2006/12/ 2/ 18: 5:974 のように表示されます。 この時計の表示を 06/12/02/18:05:97 のように表示したい(すべてのデータを二桁に)のですが うまくいきません。 何か良い方法がないか探しております よろしくお願いします。

    • ベストアンサー
    • Flash
  • palaflaにてデジタル時計を作ったのですが・・

    今回、時分のみのものを作成しましたが、 分の0表示ができません、10・20・30・・・はOKなのですが、 01・02・03・・の0が表示できません。   例15:01と表示したいのが、15:1となってしまいます。 今まで製作したもの(時・分・秒表示)は正常に表示されていたのですが。 ASは onClipEvent(enterFrame) { n_date = new Date(); now_time = ""; now_time += n_date.getHours() + " "; now_time += n_date.getMinutes() + ""; } と記述しています。 testは font=_sans サイズ16 太字斜体 変数名=now_time です。 理由、方法がわかる上級者の方、 この質問を見ていただけましたら回答をお願いいたします。

    • ベストアンサー
    • Flash
  • デジタル時計の文字色を変えたい。。。

    デジタル時計の部分を 時計の絵にはめこんでいるのですが、 現在の文字色は赤です。 onClipEvent (load) { function TIME() { hour = nowtime(); } // End of the function function nowtime() { n_time = new Date(); hours = n_time.getHours(); minutes = n_time.getMinutes(); seconds = n_time.getSeconds(); if (seconds < 10) { seconds = "0" + n_time.getSeconds(); } // end if if (minutes < 10) { minutes = "0" + n_time.getMinutes(); } // end if if (hours < 10) { hours = "0" + n_time.getHours(); } // end if n_hour = hours + ":" + minutes + ":" + seconds; return (n_hour); } // End of the function } onClipEvent (enterFrame) { this.TIME(); } 上記のどこを変えるとデジタルの色を変えることができるのでしょう? 宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • リアルタイムに時計を表示するときのsetIntervalについて

    いつもお世話になっています。 いつも以上に稚拙な質問で申し訳ないのですが、ご助力願います。 <html> <head> <script type="text/javascript"> <!-- var today = new Date(); window.onload = function dispTime(){ document.getElementById("showTime").innerHTML = today.getFullYear() + "/" + (today.getMonth()+1) + "/" + today.getDate() + " " + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); setInterval('dispTime()',1000); } //--> </script> </head> <body> <div id="showTime"></div> </body> </html> できるだけ<body onload="">を使いたくないので、window.onloadにしてあります。 イメージとしては、document.getElementById("showTime").innerHTMLでshowTimeに時間が表示され、setIntervalで再度disptimeが呼ばれ、という無限ループになればよいと考えてこのソースになりました。 ただ現状は、ロード時に時刻が表示され、そのまま動きません。 たぶんsetIntervalの場所とか使い方がおかしいような気がするのですが、どうもよくわかりません。 参考にしたサイトによってsetInterval("dispTime()"...だったり setInterval("disptime"...だったりと記述がバラバラで、 ほとんどのところでは、body onload="setInterval("...とonload扱いでした。 body onloadは使わずに、1秒ごとに動く時刻表示をするには、どこを直せばよいでしょうか。 よろしくお願いします。

  • 時間によって違う文章を出したい

    時間によって違う挨拶を表示したかったのですが、いざ書いてみてブラウザに表示してみると何も現れませんでした。この文章どこか間違っていますか? <script type=text/javascript>today=new Date();h=today.getHours();m=today.getMinutes();s=today.getSeconds();document.write(h,"時",m,"分",s,"秒","です--");if((h>5)&&(h<=10)){document.fgColor="#ffffff";document.write("おはようございます");}else if((h>10)&&(h<=17)){document.fgcolor="#ffffff";document.write("こんにちは");else{document.fgcolor="#ffffff";document.write("こんばんは");}</script>

  • ダイナミックテキストへの日付の表示がおかしい

    こんにちは、私、Flashチョー初心者です。 環境は、flash8 winXPです。 月の表示だけが、0になってしまうんですが、、、 ダイナミックテキストに時間を割り当てようとして、 以下のように、スクリプトを記述しました。 0月5日9:35 などと表示されてしまいます。 どうしてなのでしょう?  正しく1月と表示したいのですが、どなたか、教えていただけませんか? #####スクリプト######## mydate = new Date(); yy = mydate.getFullYear(); mm = mydate.getMonth(); dd = mydate.getDate(); hh = mydate.getHours(); ii = mydate.getMinutes(); ss = mydate.getSeconds(); cal = (mm+"月"+dd+"日"+hh+":"+ii);

    • ベストアンサー
    • Flash
  • 指定時間にムービークリップを再生した後戻れない他

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 各種バージョンの説明 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ FLASHのバージョン:CS3 Action Scriptのバージョン:2.0 質問者のバージョン:AS初心者 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 作りたいものの説明 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 毎時、0分0秒と、30分0秒に、 指定のムービークリップを数秒間再生して、 元の時計に戻る。といった、 鳩時計のようなものが作りたいです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ できたっぽいこと ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ○アナログ時計は正常にできたようです。 ○指定の時間に、指定のムービークリップを再生することは  できたようです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ できてないこと ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ○指定の時間に、指定のムービークリップを再生した後、  元のアナログ時計に戻れない。 ※パソコンの時間を変更して確認していますが、  一度変更した後、ブラウザを更新しないと  元のアナログ時計に戻ってくれない。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 現在のスクリプト構成 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【アナログ時計部分】 レイヤー1|○| | レイヤー2|●|●| レイヤー2の1フレーム目には、 ふつうのアナログ時計のムービークリップが入っています。 そのふつうの時計のムービークリップの中の1フレーム目には、 以下のスクリプトを書きました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ this.onEnterFrame = function() { now_date = new Date(); h = now_date.getHours(); m = now_date.getMinutes(); s = now_date.getSeconds(); this.h_mc._rotation=h*30+m*0.5; this.m_mc._rotation=m*6+s*0.1; this.s_mc._rotation=s*6; }; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【指定時間に指定MCを再生部分】 レイヤー1|○| | レイヤー2|●|●| レイヤー1の1フレーム目には、 以下のスクリプトを書きました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ this.onEnterFrame = function(){ myDate = new Date(); myHour = myDate.getHours(); if (myHour>=6 && myHour<14) { this.gotoAndStop(2); } else if (myHour>=14 && myHour<21) { this.gotoAndStop(2); } else { this.gotoAndStop(1); } }; stop(); ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ レイヤー2の2フレーム目には、 指定時間(上記のスクリプトで示すと、6時~21時以外)に 再生したい、ムービークリップを配置しています。 ※現在は、テストなので時間は適当ですが、最終的には、  12時ちょうど、12時30分、1時ちょうど、1時30分・・・  などと、30分おきに指定のムービーを再生したいです。 ※また、現在はテストなので、指定の時間に再生したい  ムービークリップは1種類しかないのですが、  最終的には数種類に増やしたいです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ききたいこと ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ○指定の時間に、指定のムービークリップを再生した後、  ブラウザの更新ボタンを押さなくても、  元のアナログ時計に戻すにはどうしたらよいでしょうか? ○指定のムービークリップは、ループしているムービーなのですが、  数秒間再生したら、元のアナログ時計に戻したいのですが、  現在、私の知っているスクリプトの記述方法だと、 if (myHour>=6 && myHour<14) { this.gotoAndStop(2); のように、時間しか指定できないので、 数秒間後に元のアナログ時計に戻すことができません。 (1時間後には戻すことはできます) 秒の指定の仕方を教えてください。 長くなってしまいましたが、どなたか教えていただけると幸いです。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • テキストエリアに履歴を残したい

    以下のスクリプトではテキストエリアにボタンを押した時刻が、その都度表示されるだけです。複数回ボタンを押したときに履歴が残るようにしたいのですが難しいでしょうか? <html> <head> <title>履歴</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <script type="text/javascript"><!-- myDate = new Date(); Y = myDate.getFullYear(); M = myDate.getMonth() + 1; D = myDate.getDate(); myTime = new Date(); H = myTime.getHours(); m = myTime.getMinutes(); S = myTime.getSeconds(); L = Y + "年" + M + "月" + D + "日" + H + "時" + m +"分" + S + "秒\n" function myFunc(){ myDate = new Date(); Y = myDate.getFullYear(); M = myDate.getMonth() + 1; D = myDate.getDate(); myTime = new Date(); H = myTime.getHours(); m = myTime.getMinutes(); S = myTime.getSeconds(); Log = Y + "年" + M + "月" + D + "日" + H + "時" + m +"分" + S + "秒\n" document.myForm.Log.value = Log; } //--> </script> </head> <BODY> <CENTER> ボタンを押すと履歴が表示されます。 <form name="myForm"> <input type="button" value="PUSH" onClick="myFunc()" STYLE="font-size: 16pt;"> <P> <textarea name="Log" cols="50" rows="15" STYLE="font-size: 16pt;"> PUSH履歴が表示されます。 </textarea> </form> </CENTER> </body> </html> 宜しくお願いします。

  • javascriptの外部ファイルにする方法

    HTML内の利用箇所にそのまま下記のように日付の表示を記述しているのですが、外部ファイル化するにはどうしたらよいのでしょうか。 <script language="JavaScript"> <!-- var now=new Date(); myTbl = new Array("日","月","火","水","木","金","土"); document.write(now.getFullYear(),"年" +(now.getMonth()+1)+"月" +now.getDate(),"日(" +myTbl[now.getDay()]+") "); document.write(now.getHours()+":"+now.getMinutes()+":"+ now.getSeconds()); --> </script> javascript初心者です。よろしくお願いいたします。

  • 時計が表示できません

    ASP.NET C# でHTMLとJavascriotを使用しWeb画面を作成しているのですが、そこに表示するリアルタイムで動く時計が上手く表示できません。<head runat="server">~</head>にて以下のプログラムを埋め込むと動かす事はできます。 <SCRIPT type="text/javascript"> <!-- function Watch() { now = new Date(); year = now.getYear(); month = now.getMonth()+1; day = now.getDate(); hour = now.getHours(); minute = now.getMinutes(); second = now.getSeconds(); if (year < 1000) { year += 1900 } if (hour < 10) { hour = '0' + hour } if (minute < 10) { minute = '0' + minute } if (second < 10) { second = '0' + second } document.form.watch.value = year+'年' + month + '月' + day   + '日 '+ hour + ':' + minute + ':' + second; setTimeout("Watch()",1000); } document.write('<FORM name=form><name=form><INPUTname=watchsize=27></FORM>'); Watch(); //--> (注:上記プログラムはあるサイトのコピーとなります) ですが、<body>~</body>内の自分が表示させたい位置に埋め込むと、 表示できません。 大変申し訳ないのですが、 わかる方どなたか教えていただけないでしょうか?

専門家に質問してみよう