電子書籍の厳選無料作品が豊富!

現在Flashサイトを制作中の者です。
ActionScript3.0についてわからなくなってしまい困っています。
私のレベル:Flashを始めたばかりの初心者です。
使用環境:AdobeFlashCS5、ActionScript3.0
やりたいこと:”開催まであと○○日○○時間○○分○○秒です。”と表示するカウントダウンflashを作りたい。

辞典や入門書やウェブサイトを私なりに何日もかけて探しつくしました。
本では現在時刻や経過時間などを表示するAS3しか見つけられず、
またウェブサイトでは私の調べ方が悪いのでしょうが、
AS2のものしか見つけられませんでした。
何日も考えているのですが、どうしても自分1人では解決できず、
最後の頼みと思ってこちらでお知恵をお借りしたく質問させて頂きました。
こうした内容の本か、コードやサンプルがあるサイトを
ご存知でしたらご教授いただけないでしょうか。
宜しくお願い致します。

A 回答 (2件)

すみません #1 です。



> 開催日時を
> new Date(2011,4,1,0,0,0);//2011年4月1日 午前0時0分0秒
> と書き換えてみたのですが、
> 表示値の日付が「マイナス17日」となってしまいました。

本当ですね。検証不足で失礼しました。

変数の型指定 の unint や int がまずかったです。
限界値を振り切れてました。。。

そういう大きな数の型指定は ActionScript 2.0 同様 Number が良いです。

その他,妙な雑念も少し追い払って次のような感じで良いのではないかと思います。

------------------------------------
//---テキストフィールド「cd_txt」を用意---
//(手動で用意しても良いですよ。)
var cd_txt:TextField = new TextField();
//適当に設定
cd_txt.border = true;
cd_txt.background = true;
cd_txt.autoSize = "left";
//適当に座標を指定
cd_txt.x = 20;
cd_txt.y = 10;
addChild(cd_txt);

//---開催の日時を設定---
//例:2011年4月1日 午前0時0分0秒
var open_date:Date = new Date(2011,3,1,0,0,0);

//開催日時の1970年1月1日からの経過ミリ秒数を取得
var open_time:Number = open_date.getTime();

//今の日時オブジェクトの宣言
var now_date:Date;

//1フレーム進む時間毎に関数countDownを実行するイベントリスナーを登録
this.addEventListener(Event.ENTER_FRAME,countDown);

//関数countDownの定義
function countDown(evt:Event):void {
//今の日時を取得
now_date = new Date();
//今の1970年1月1日からの経過ミリ秒数を取得
var now_time:Number = now_date.getTime();
//開催日と今の差分ミリ秒数を算出
var diff_time:Number = open_time - now_time;
//カウントダウンする日数を取得
var cd_days:Number = Math.floor(diff_time/(24*60*60*1000));
//余りのミリ秒を取得
var remain_ms:Number = diff_time-cd_days*24*60*60*1000;
//カウントダウンする時数を取得
var cd_hours:int = Math.floor(remain_ms/(60*60*1000));
//余りのミリ秒を取得
remain_ms -= cd_hours*60*60*1000;
//カウントダウンする分数を取得
var cd_minutes:int = Math.floor(remain_ms/(60*1000));
//余りのミリ秒を取得
remain_ms -= cd_minutes*60*1000;
//カウントダウンする秒数を取得
var cd_seconds:int = Math.floor(remain_ms/1000);
cd_txt.text = "開催まであと" + cd_days + "日" + cd_hours + "時間" + cd_minutes + "分" + cd_seconds + "秒です。";
}
--------------------------------

なお ActionScript に関わらず 月の数(1月 2月…)は,日本人の感性とは1箇月ずれます。

日本人の 1月 は プログラミング言語では 0の月 です。
日本人の 2月 は プログラミング言語では 1の月 です。
日本人の 12月 は プログラミング言語では 11の月 です。

ですから
#1 の場合は

//例:2010年12月30日 午前7:30分 0秒
var open_date:Date = new Date(2010,11,30,7,30,0);

のままで良いですし上の例も

//例:2011年4月1日 午前0時0分0秒
var open_date:Date = new Date(2011,3,1,0,0,0);

で良いのです。
    • good
    • 0
この回答へのお礼

BlurFiltanさま

丁寧なお返事ありがとうございます。
実行しましたところ、私がしたいと思っていた通りの表示ができました。もう感激です!
月の数がずれるのですね。ちょっと感じてた疑問でした...納得です。
ここで質問するまでの数週間のオロオロはなんだったんでしょう;・v・`
世の中には親切な人がいるものです...BlurFiltanさま本当にありがとうございました。
もっと勉強しなおしてきます。

お礼日時:2010/12/18 23:56

その辺は ActionScript 2.0 も 3.0 もほとんど変わらないように思いますが。



たとえば AS3 の新規ドキュメントを作成して
次のコードをフレーム1に書き
即 「制御」→「ムービープレビュー」する例です。

-----------------------------------------
//---テキストフィールド「cd_txt」を用意---
//(手動で用意しても良いですよ。)
var cd_txt:TextField = new TextField();
//適当に設定
cd_txt.border = true;
cd_txt.background = true;
cd_txt.autoSize = "left";
//適当に座標を指定
cd_txt.x = 20;
cd_txt.y = 10;
addChild(cd_txt);

//---開催の日時を設定---
//例:2010年12月30日 午前7:30分 0秒
var open_date:Date = new Date(2010,11,30,7,30,0);

//開催日時の1970年1月1日からの経過ミリ秒数を取得
var open_time:uint = open_date.getTime();

//今の日時オブジェクトの宣言
var now_date:Date;
//カウントする差分の日時オブジェクトの宣言
var cd_date:Date;

//1フレーム進む時間毎に関数countDownを実行するイベントリスナーを登録
this.addEventListener(Event.ENTER_FRAME,countDown);

//関数countDownの定義
function countDown(evt:Event):void {
//今の日時を取得
now_date = new Date();
//今の1970年1月1日からの経過ミリ秒数を取得
var now_time:uint = now_date.getTime();
//開催日と今の差分ミリ秒数を算出
var diff_time:int = open_time - now_time;
//カウントダウンする差分の日時を取得
cd_date = new Date(diff_time);
//カウントダウンする日数を取得
var cd_days:int = Math.floor(cd_date.getTime()/(24*60*60*1000));
//余りのミリ秒を取得
var remain_ms:int = diff_time-cd_days*24*60*60*1000;
//カウントダウンする時数を取得
var cd_hours:int = Math.floor(remain_ms/(60*60*1000));
//余りのミリ秒を取得
remain_ms -= cd_hours*60*60*1000;
//カウントダウンする分数を取得
var cd_minutes:int = Math.floor(remain_ms/(60*1000));
//余りのミリ秒を取得
remain_ms -= cd_minutes*60*1000;
//カウントダウンする秒数を取得
var cd_seconds:int = Math.floor(remain_ms/1000);
cd_txt.text = cd_days + "日" + cd_hours + "時" + cd_minutes + "分" + cd_seconds + "秒";
}
---------------------------------------
 
こんな感じでできるかと。
    • good
    • 0
この回答へのお礼

BlurFiltanさま

はじめまして。早速のご返信ありがとうございます!
恥ずかしいですが自分ではいくら考えても堂々巡りだったので、道が開けたような気持ちです。
私は根本的にASの勉強不足だとわかりました。もっと勉強します。

コードを実行してみました。
BlurFiltanさまが書いてくださったコメントアウトを参考に、開催日時を
new Date(2011,4,1,0,0,0);//2011年4月1日 午前0時0分0秒
と書き換えてみたのですが、表示値の日付が「マイナス17日」となってしまいました。
お答えいただいてから、基本文法を今一度確認し直しているのですが、
マイナス値と実際の日付との関連性までたどり着けないでいます。
仮に年を越えて2011年4月1日を開催日としたい場合、どう変更すべきでしょうか?

※以下はなんとなく気になったことなので、差し障りあればお答え頂かなくても大丈夫です。
(BlurFiltanさまはどのようにASをマスターされたのでしょうか。
私は初めたばかりなのもあるのですが、今のままだと一生できる気さえしないでいます。
もし何か秘訣などありましたら、ぜひ参考にさせて頂きたいです。)

お礼日時:2010/12/18 21:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!