No.2ベストアンサー
- 回答日時:
#1です
> ある日の午前0時に発売開始する商品があるとして、
> その日の時間までをフラッシュで表示したい
なるほど。そういうことですか。
その「ある日の午前0時」(仮) は,
サーバでもクライアントでも同じ時点を指しますよね。
今の時刻が2000年10月であっても2010年11月であっても「ある日の午前0時」は同じ時点を指します。
ですから,これは固定でFlash(クライアントサイド) でも求められます。
「今」は,
どこから見るか,いつから見るかによって変わりますから,
この「今」をサーバで決めた今にするということですよね。
ActionScript 3.0 で
Flash フレーム1 のスクリプトだと
こんな感じでできると思います↓
----------------------
//テキストフィールドを作成
var time_txt:TextField = new TextField();
time_txt.autoSize = TextFieldAutoSize.LEFT;
addChild(time_txt);
//ゴール時刻を2010年11月20日13時とする
var goal_date:Date = new Date(2010,10,20,13,0,0);
//今のクライアント時刻を入れる変数
var now_date:Date;
//キャッシュ参照対策用
now_date = new Date();
var now_time:Number = now_date.getTime();
//サーバ時刻との差を入れる変数
var dif_time:Number;
//PHPへのパス(キャッシュ参照対策入り)
var php_url:URLRequest = new URLRequest("time.php" + "?t=" + now_time);
//PHPのローダー
var php_ld:URLLoader = new URLLoader();
//PHPロード時に関数onLoadCompを実行
php_ld.addEventListener(Event.COMPLETE, onLoadComp);
//PHPをロード
php_ld.load(php_url);
//関数onLoadCompの定義
function onLoadComp(evt:Event):void {
//今のクライアント時刻
now_date = new Date();
//サーバとクライアントの1970/1/1からの経過ミリ秒の差
dif_time = Number(evt.target.data) - now_date.getTime();
//毎フレーム関数countDownを実行
addEventListener(Event.ENTER_FRAME,countDown);
}
//関数onLoadCompの定義
function countDown(evt:Event):void {
//今のクライアント時刻
now_date = new Date();
var sec:Number = (goal_date.getTime() - now_date.getTime() - dif_time)/1000;
time_txt.text = "あと " + String(Math.round(sec)) + "秒";
}
----------------------
キャッシュ参照対策を入れていますから
このままではムービープレビューでは動作しないと思います。
SWF と HTML をパブリッシュした上で
「time.php」 が 1970年1月1日からのミリ秒を出すようにして
HTML をブラウザで見たら「あと○○秒」が表示されると思います。
「ある日の午前0時」(仮) は Flash 内で固定的にしていますが,
サーバで変えてその変えたデータもロードするようにしても良いと思います。
※それと
他プログラム言語でも同じですが
月の数 は 日本人的数え方 とは 1 ずれます。
日本人の1月はプログラムでは0の月になります。
12月は11の月です。
この回答への補足
丁寧なご回答ありがとうございます。
勉強不足なところもありますので、かわらない部分等あるとは思いますが、ひとつひとつじっくり実践していきたいと思います。
ありがとうございました。
実際に動かしてみたのですが、時間は表示されるのですが、おおよそ見当がつく時間とはかけ離れた時間が表示されてしまいました。
そこで色々調べてみたのですが、下記URLページを見てスクリプトを変更するとうまく動いてくれました。
http://1ft.cbass.jp/blog/2008/07/000037.html
------------------------------------------------
//サーバとクライアントの1970/1/1からの経過ミリ秒の差
dif_time = Number(evt.target.data) - now_date.getTime();
↓
dif_time = Number(evt.target.data)*1000 - now_date.getTime();
------------------------------------------------
私はこれで大丈夫だと思うのですが、念のため報告させていただきました。
あと、ひとつ疑問に思ったのですが、フラッシュで1秒というのはどうやって認識してるのでしょうか?
例えばフレームレートが12だったら12フレームいったら1秒ということですよね。
このカウントダウンのスクリプトはフレームレートに関係なく1秒でカウントダウンしてるのですが、これはどうやって1秒と認識してるのでしょうか。
色々と申し訳ありませんが、宜しくお願い致します。
No.3
- 回答日時:
#2です
> ------------------------------------------
> //サーバとクライアントの1970/1/1からの経過ミリ秒の差
> dif_time = Number(evt.target.data) - now_date.getTime();
> ↓
> dif_time = Number(evt.target.data)*1000 - now_date.getTime();
> ------------------------------------------
> 私はこれで大丈夫だと思うのですが、念のため報告させていただきました。
それは,
サーバ(PHP)からFlashに 『秒』 を送ったからでしょう?
それならばそのスクリプトで良いです。
#1で,私が書いたPHPコード↓
<?php
$now = time() * 1000;
echo $now;
?>
これだとだと ミリ秒 が送信されるので
それに合わせてFlashのスクリプトの方には 「*1000」 を入れなかったのです。
勝手に違う場所のコードを変えると混乱するでしょう?
だからあえて #1 のPHPはそのままでという条件でのことを書いたのです。
> フラッシュで1秒というのはどうやって認識してるのでしょうか?
???
Flash Player が PC の時刻を1フレーム進む時間毎に取得しているだけですよ。
何が疑問なのかかわかりませんけが。。。
それが不思議でしたら,PCで時間が取得できていること自体の方がもっと不思議です。
PCで時刻を取得するアルゴリズムや仕組みなどそんな難しいことはさておき,
Flash Player はとにかく PC が何らかの形で得ている時刻を単に見に行っているだけです。
何の不思議もありません。
> 例えばフレームレートが12だったら12フレームいったら1秒ということですよね。
そうです。
でもそれは何も関係ないでしょう?
1秒に12回PCの時刻を見に行っても
10分に1回PCの時刻を見に行っても
間隔などはどうでも良くて関係ありません。
8時に見に行けば 「8時だよ!」 と
8時11分30秒に見に行けば 「8時11分30秒だよ!」 と
PCが返してくれるだけです。
人間でもそうです。
10時に時計を見れば10時です。
頻繁に時計を見ても,1時間に1回時計を見ても 10時は10時です。
ご回答ありがとうございます。
疑問というか、勉強不足失礼しました。
>8時に見に行けば 「8時だよ!」 と
8時11分30秒に見に行けば 「8時11分30秒だよ!」 と
PCが返してくれるだけです。
まったくその通りですね。。。こんな質問にも答えていただきありがとうございました。
今回は非常に勉強になりました。
No.1
- 回答日時:
◎まず作ろうとされているものがわかりません
「タイマー」 とは普通 「2つ以上の時点間の相対的な時間差を測るもの」 です。
例えば
ボタンA がクリックされてから ボタンB がクリックされるまでの間の時間
とか
Flash の再生が開始されてから現在までの経過時間
とかをタイマーで測るのです。
それのどこにサーバやクライアントというものが絡むのでしょうか?
サーバでもクライアントでも経過時間は経過時間でほぼ同じになると思いますが。
「タイマー」ではなく「時計」ではないですか?
つまり
「PHPで取得したサーバ時刻で動く時計」 を作成したいということではないかと思うのですが。
◎次にバージョンがわかりません
お持ちの Flash のバージョンも ActionScript のバージョンもわかりません。
これではまともに回答できませんが。
~・~・~・~・~・~・~・~・~・~・~・~・~
「PHPで取得したサーバ時刻で動く"時計"」 で
「Flash MX 2004 以上」で
「ActionScript 2.0」のものでしたら
以前に回答したことがあります↓。
「flashで作成した時計を、PHPで取得したサーバー時刻で動かしたい。」
http://okwave.jp/qa5702578.html
「Flash MX 2004 以上」とは
Flash MX 2004,8,CS3,CS4,CS5 のことです。
なお,
上記ページでは PHPファイル 「time.php」 の コード を書いていませんが,
1970年1月1日からの経過ミリ秒数(経過秒数×1000)は,
次のようにすれば表示(Flashに送信)できます(一応検証済み)。
「time.php」
---------------------
<?php
$now = time() * 1000;
echo $now;
?>
---------------------
「PHP関数講座:time -- そふぃのphp入門」
http://nyx.pu1.net/function/datetime/time.html
ちなみに
私がこの検証に使用したサーバは 上記のPHPコードでできたのですが,
time() で得られる数値は UNIX時間 であるため 20時間 の差があるなどと書かれたページもあります。
「time()関数-PHP関数リファレンス」
http://www.scollabo.com/banban/php/ref/ref_time. …
この回答への補足
回答ありがとうございます。
説明不足すみませんでした。
具体的にやりたい事とは、キャンペーンページのオープンまでの時間をカウントダウンしたいと考えています。
例えばある日の午前0時に発売開始する商品があるとして、その日の時間までをフラッシュで表示したいと思っています。
actionscriptのバージョンは3.0です。
教えていただいた参考サイト等を見てみたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
名古屋の栄と錦は治安悪い?
-
NumericUpDownの数値を選択済み...
-
VB.NET でのLaod/unLoad につ...
-
メディアンフィルタ
-
vba メモリーリーク
-
VBのレコードセットを閉じない...
-
ブック開いたときのフォーカス指定
-
エアー漏れの流量の計算式を教...
-
『μg』の読み方と意味。
-
項目数は英語で
-
Movable Type 3.11-jaの文字化け
-
css flash
-
Pen3とPen4のベンチがほぼ一緒?
-
HDDクラッシュするのはなぜ・・...
-
携帯電話のマイクロSDカードに...
-
トライバーストができるマシン...
-
word
-
数式中の文字をCambria Math以...
-
illustratorとExcelは連携出来...
-
PowerPoint SmartArtの箇条書...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
名古屋の栄と錦は治安悪い?
-
『μg』の読み方と意味。
-
NumericUpDownの数値を選択済み...
-
VB.NET でのLaod/unLoad につ...
-
テキストボックスからフォーカ...
-
VB.NETのテキストボック...
-
項目数は英語で
-
mailの送信音がしなくなったの...
-
シリアル通信について
-
vba メモリーリーク
-
CPUを2個搭載できるマザーボー...
-
フォームを開く時のイベント処理
-
TextBoxにカーソルがあるかない...
-
一部の文字のみ文字化けします
-
スマホが水に濡れてしまい、中...
-
C++の例外処理
-
PDFの余白、黄ばみ除去等の加工...
-
ob_start()した後、ob_flush()...
-
ヒント表示について
-
シリアルフラッシュメモリをな...
おすすめ情報