#1&2です。
#2の補足に書かれているスクリプトは,
カウントダウンのものです。
#1でも書きましたとおり,
カウントアップの場合は,
期日を過ぎると勝手にカウントダウンするという可能性がないので,
カウントダウンより簡単です。
ですから if分岐 がまず不要ですね。
ついでに「〆切経過時間 : 」こんなのも不要ですね。
したがって↓こうなります。
///////////////////////////////////////////////////////////////
function simekiri(mYear, mMonth, mDate, mHour, mMin, mSec) {
var nowDate = new Date();
var year = nowDate.getFullYear();
var month = nowDate.getMonth()+1;
var datee = nowDate.getDate();
var hour = nowDate.getHours();
var minutes = nowDate.getMinutes();
var second = nowDate.getSeconds();
var ima = Date.UTC(year, month, datee, hour, minutes, second);
var kijitu = Date.UTC(mYear, mMonth, mDate, mHour, mMin, mSec);
var remainTime = (kijitu-ima)/1000;
// カウントアップを表示
remainTime *= -1;
var answer = Math.floor(remainTime/60/60/24)+"日 ";
answer += Math.floor(remainTime/60/60%24)+"時間 ";
answer += Math.floor(remainTime/60%60)+"分 ";
answer += Math.floor(remainTime%60)+"秒 ";
return answer;
}
this.onEnterFrame = function() {
txt = simekiri(2005, 1, 8, 3, 33, 0);
};
///////////////////////////////////////////////////////////////
こうすると,
シンプルに何をすれば良いのかが見やすくなりませんか。
ステージ上に 「txt」 という変数名のダイナミックテキストフィールドを置いて,
上のスクリプトをフレームに書くと無事動作しますね。
> ダイナミックテキストだと、時間が繰り上がるごとに
> 0~9の数字の字間がズレてしまい、見た目的(デザイン)に
> ちょっとよろしくないようです。
> また、09(時)05(分)のような二桁表示が
> できないのもちょっと問題にです。
それは,#2の参考URLのリンク先に対処法が書いてあるでしょう。
---引用---
> //取得した値の文字列の必要部分をsubstringで抜き出し、
> それぞれのインスタンス名がついたムービークリップが
> それを参照します。
>
> if (hour<10) {
> hour01.count = "0";
> hour02.count = substring(hour, 1, 1);
> } else {
> }
> if (minute<10) {
> minutes01.count = "0";
> minutes02.count = substring(minute, 1, 1);
> } else {
… 以下省略 …
10未満だったら 0 を前につけて,
10以上だったらそのまま表示。
そういうことですよ。
上の通りにしてもかまいません。
しかしダラダラ長い if文 が私は嫌いなので,
もっと手早く,
10未満であろうと10以下であろうと,
強制的に 0 を前に付けて,下2桁を表示するという方法を取ります。
「取得した時間の表示について。」
http://oshiete1.goo.ne.jp/qa2575992.html
↑教えて!goo ↓OKWave (同じです)
http://okwave.jp/qa2575992.html
したがって,
補足に書かれている,
> また、09(時)05(分)のような二桁表示が
> できないのもちょっと問題にです。
に対する対処法入りスクリプトにするとこうなります↓。
///////////////////////////////////////////////////////////////////
function simekiri(mYear, mMonth, mDate, mHour, mMin, mSec) {
var nowDate = new Date();
var year = nowDate.getFullYear();
var month = nowDate.getMonth()+1;
var datee = nowDate.getDate();
var hour = nowDate.getHours();
var minutes = nowDate.getMinutes();
var second = nowDate.getSeconds();
var ima = Date.UTC(year, month, datee, hour, minutes, second);
var kijitu = Date.UTC(mYear, mMonth, mDate, mHour, mMin, mSec);
var remainTime = (kijitu-ima)/1000;
// カウントアップを表示
remainTime *= -1;
var answer = Math.floor(remainTime/60/60/24)+"日 ";
answer += ("0"+Math.floor(remainTime/60/60%24)).substr(-2, 2)+"時間 ";
answer += ("0"+Math.floor(remainTime/60%60)).substr(-2, 2)+"分 ";
answer += ("0"+Math.floor(remainTime%60)).substr(-2, 2)+"秒 ";
return answer;
}
this.onEnterFrame = function() {
txt = simekiri(2005, 1, 8, 3, 33, 0);
};
///////////////////////////////////////////////////////////////////
これで,
ダイナミックテキストフィールドのフォントの種類を,
「MS-P明朝」 とかそういうプロポーショナルフォントではなく,
「_等幅」 という前にアンダースコア( _ )の付いたデバイスフォントにすると,
0~9の数字の字間がズレてしま"わず"、見た目的(デザイン)にちょっとよろしく "ある" 状態になりますね。
ダイナミックテキストで埋め込みフォントを使用しない場合は,
フォントの種類を限定しても無駄です。
見る環境にそのフォントがなければ,HTML と同じく,そのPCのデフォルトのフォントが表示されてしまいます。
したがって,フォントを埋め込まないダイナミックテキストを使用する場合は,
前にアンダースコアの付いた「デバイスフォント」を使用する方が良いです。
しかし,0~9までの数字くらいでしたら,
埋め込んでも大した容量にはなりません。
したがって,
Flash MX などの場合,
ダイナミックテキストのプロパティで好きなフォントを選んで,
「文字」ボタン(テキストオプションの編集)をクリックして,
「数字0~9」にチェックを入れて「OK」してフォントを埋め込んでも良いと思います。
Flash 8 の場合は,
ダイナミックテキストのプロパティで好きなフォントを選んで,
フォントのレンダリング方法を「アンチエイリアス(アニメーション優先)」を選ぶと,
「埋め込みをする必要があります。」
のようなダイアログがでてくるので,
「数字..0~9」(11文字) を選んでフォントを埋め込んでも良いと思います。
話が Flash からはずれますが,
選ぶフォントは P などが付かないフォント,
つまりプロポーショナルフォントでないフォントを選べば型くずれしません。
ただし,上のままだと「日」「時間」「分」「秒」は埋め込まれないため,
表示上その文字は飛んでしまいますけどね。
> こちらのスクリプトのどの辺にどうNo.2のものを組み合わせれば
> うまく機能するのでしょうか?
ここまでの説明でできませんか?
変数 txt に代入される値は,1つの連続した値になっています。
var answer = Math.floor(remainTime/60/60/24)+"日 ";
answer += ("0"+Math.floor(remainTime/60/60%24)).substr(-2, 2)+"時間 ";
answer += ("0"+Math.floor(remainTime/60%60)).substr(-2, 2)+"分 ";
answer += ("0"+Math.floor(remainTime%60)).substr(-2, 2)+"秒 ";
これをバラバラにして,
それぞれのムービークリップの変数 count に入れてやれば,
画像表示ができますよね。
あと,「日」はどうしようとされているのかわかりません。
どうしたいのかわかりませんが,
「日」も4桁くらいに合わせるのが良いのではないでしょうか?
まぁ,「日」に関しては考えてもらうとして,
#2で書いた URL のように,
0~9 の画像が入った 10フレーム の ムービークリップ を1つ用意して,
それをコピペで6つにして横1列に配置し,
左から順に
「date01」,「date02」,「minutes01」,「minutes02」,「seconds01」,「seconds02」
というインスタンス名を付けます。
そして,スクリプトを次のようにするとほぼ完成です。
//////////////////////////////////////////////////////////////////////////////
function simekiri(mYear, mMonth, mDate, mHour, mMin, mSec) {
var nowDate = new Date();
var year = nowDate.getFullYear();
var month = nowDate.getMonth()+1;
var datee = nowDate.getDate();
var hour = nowDate.getHours();
var minutes = nowDate.getMinutes();
var second = nowDate.getSeconds();
var ima = Date.UTC(year, month, datee, hour, minutes, second);
var kijitu = Date.UTC(mYear, mMonth, mDate, mHour, mMin, mSec);
var remainTime = (kijitu-ima)/1000;
// カウントアップを表示
remainTime *= -1;
var answer = Math.floor(remainTime/60/60/24)+"日 ";
answer += ("0"+Math.floor(remainTime/60/60%24)).substr(-2, 2)+"時間 ";
answer += ("0"+Math.floor(remainTime/60%60)).substr(-2, 2)+"分 ";
answer += ("0"+Math.floor(remainTime%60)).substr(-2, 2)+"秒 ";
date01.gotoAndStop(Number(("0"+Math.floor(remainTime/60/60%24)).substr(-2, 1))+1);
date02.gotoAndStop(Number(("0"+Math.floor(remainTime/60/60%24)).substr(-1, 1))+1);
minutes01.gotoAndStop(Number(("0"+Math.floor(remainTime/60%60)).substr(-2, 1))+1);
minutes02.gotoAndStop(Number(("0"+Math.floor(remainTime/60%60)).substr(-1, 1))+1);
seconds01.gotoAndStop(Number(("0"+Math.floor(remainTime%60)).substr(-2, 1))+1);
seconds02.gotoAndStop(Number(("0"+Math.floor(remainTime%60)).substr(-1, 1))+1);
return answer;
}
this.onEnterFrame = function() {
txt = simekiri(2005, 1, 8, 3, 33, 0);
};
//////////////////////////////////////////////////////////////////////////////
全てフレームで gotoAndStop を指示しましたから,
0~9 の画像が入った 10フレーム の ムービークリップ の中の,
ダラダラと無駄に長く,そして同じことを全てのフレームに書いてあるスクリプトは全て不要です。
つまり,#2のURLに書いてある
> すべてのキーフレームにアクションスクリプトを記述します。
> stop();
>
> switch (count) {
> case "0" :
> gotoAndPlay(1);
> break;
> case "1" :
> gotoAndPlay(2);
> break;
> case "2" :
… 長いので省略 …
この switch 文は全て不要です。
レイヤーごと削除してください。
また,_root(メインムービー)のフレームも1フレームのみでかまいません。
2フレーム以上にしてもかまいませんが,2フレーム以上にする必要は特にありません。
同様に「日」もどうすべきか考えてください。
「日」ができましたら,
「txt」という変数名のテキストフィールドは不要ですから削除してください。
また,
var answer = Math.floor(remainTime/60/60/24)+"日 ";
answer += ("0"+Math.floor(remainTime/60/60%24)).substr(-2, 2)+"時間 ";
answer += ("0"+Math.floor(remainTime/60%60)).substr(-2, 2)+"分 ";
answer += ("0"+Math.floor(remainTime%60)).substr(-2, 2)+"秒 ";
の部分も不要ですね。
これも削除してください。
お礼
お返事遅れまして、申し訳ありません。 本当に助かりました、無事納期に間に合う事ができました。 ろくにFLASHを勉強したわけでもないのに、 FLASHの仕事をやるはめになってしまい、正直泣きそうな状況でした(笑) 住所がわかっていれば菓子詰め等をお送りしたいところですが、 ネット上のやりとりでは現実干渉すべきではないと思い、 割愛させていただきます。 本当に助かりました、ありがとうございました。