|
|
|
2009/7/9(Thu) 20:47:27|NO.26298
エヴァみたいな、残り時間時計を作りたいんですが、
残り時間の計算がうまくいきません。
アニメのイメージのようにプログラミングするにはどうしたらいいでしょう?
#include "hgimg3.as"
width 640,480
title " 残り時間デジタル時計"
; 曜日文字列を配列に設定
Weeks = "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
boxf 0, 0, 640, 480
color 0, 255, 0
pos 180,0
font "MS ゴシック",70,1
mes "現在時刻"
repeat; 日付データを書式化
Year = ""+gettime(0)+"" ; 西暦年(4桁:yyyy)
Month = strf("%02d", gettime(1)) ; 月 (2桁:MM)
Week = Weeks(gettime(2)) ; 曜日 (文字列)
Day = strf("%02d", gettime(3)) ; 日 (2桁:dd)
Hour = strf("%02d", gettime(4)) ; 時間 (2桁:hh)
Minute = strf("%02d", gettime(5)) ; 分 (2桁:mm)
Second = strf("%02d", gettime(6)) ; 秒 (2桁:ss)
MSecond = strf("%03d", gettime(7)) ; ミリ秒(3桁:xxx)
;変数 Time にまとめる
Time = Year + "/" + Month + "/" + Day + "(" + Week + ") \n"
Time += Hour + ":" + Minute + ":" + Second + ":" + MSecond
redraw 0 ; ちらつきをなくすため仮想描画
color 0, 0, 0 ; 塗りつぶし色をBlack
boxf 0, 70, 640, 200 ; 時刻表示部分を塗りつぶし
pos 70, 70 ; カレントポジションを(0, 18)座標に指定
color 0, 255, 0 ; 文字色をGreen
font "MS ゴシック",70,1
mes Time ; 現在時刻を表示
redraw 1 ; 実際に描画反映
color 255,128,0
pos 180,210
wait 1 ; ウェイト
mes "残り時間"
mes Remain
onexit *exit
loop
*exit
end
| |
|
2009/7/9(Thu) 23:11:56|NO.26299
つまり、カウントダウンのこと…… ですよね?
hgimg3 を使ってるみたいですけど、
hggettime を使わないで gettime にした場合はこんな感じでしょうか。
残りの時間が200時間とか、すごく多くなるときは
大きい桁の部分を別の変数で管理すればなんとか使えると思います。
; 3分間待ってやr
lim = 180000
; 開始時の時間をひとつの変数に記憶
start = gettime(5) * 60000
start += gettime(6) * 1000
start += gettime(7)
repeat
; 今の時間を取得
time = gettime(5) * 60000
time += gettime(6) * 1000
time += gettime(7)
redraw 0
color 0, 0, 0 : boxf
color 255, 255, 255
pos 0, 0
mes "始めたときの時間 " + start
mes "今の時間 " + time
n = lim - ( time - start )
mes "\n" + ( n / 60000 ) + ":" + ( n / 1000 \ 60 ) + ":" + ( n / 10 \ 100 )
redraw 1
await 16
loop
|
|
2009/7/9(Thu) 23:32:23|NO.26300
エヴァ風カウントダウンタイマー(5分)
// http://www.trojanbear.net/omake.htm#sevenbar
// 上記サイトより"SEVENBAR"(7barP.ttf)をダウンロードして
// インストールするとよりリアルになりますw
#uselib "winmm"
#cfunc timeGetTime "timeGetTime"
Weeks = "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
title "新世紀エヴァンゲリオン - 初号機風タイマー"
buffer 2,640,480
color:boxf
color 239,170,10
pos 10,10 : font msmincho,32,16 : mes "活動限界まで"
pos 210,28 :font msmincho,14,16 : mes "ACTIVE TIME REMANING :"
pos 10,50 : font msmincho,24,16 : mes "あと"
pos 440,30 : font msmincho,64,16 : mes "内部"
pos 440,90 : font msmincho,32,16 : mes "INTERNAL"
line 430,30,620,30:line 620,30,620,120
line 430,120,620,120:line 430,30,430,120
pos 440,140 : font msmincho,20,16 : mes "主電源供給システム"
pos 440,164 : font msmincho,14,16 : mes "MAIN ENERGY SUPPLY SYSTEM"
line 430,138,620,138:line 620,138,620,180
line 430,180,620,180:line 430,138,430,180
color 239,10,10:font msmincho,32,16:boxf 580,38,610,114
gsel 0,0:gcopy 2,0,0,640,480
pos 60,64:color 239,170,10:font "7barP",128,16
mes "5:00:00"
st=timeGetTime()
ct=5*60*1000 //5分
repeat
;タイマー計算
et=timeGetTime()
nt=et-st ;残量計算
fun=((ct-nt)/1000)/60 ;分
byo=((ct-nt)/1000)\60 ;秒
mb=(ct-nt)\100 ;ミリ秒
if ct<=nt:break
;カウント表示
pos 60,64:color 239,170,10:font "7barP",128,16
mes ""+fun+":"+strf("%02d",byo)+":"+strf("%02d",mb)
;現在時刻取得
Year = ""+gettime(0)+"" ; 西暦年(4桁:yyyy)
Month = strf("%02d", gettime(1)) ; 月 (2桁:MM)
Week = Weeks(gettime(2)) ; 曜日 (文字列)
Day = strf("%02d", gettime(3)) ; 日 (2桁:dd)
Hour = strf("%02d", gettime(4)) ; 時間 (2桁:hh)
Minute = strf("%02d", gettime(5)) ; 分 (2桁:mm)
Second = strf("%02d", gettime(6)) ; 秒 (2桁:ss)
MSecond = strf("%03d", gettime(7)) ; ミリ秒(3桁:xxx)
;変数 Time にまとめる
Time = Year + "/" + Month + "/" + Day + "(" + Week + ") \n"
Time += Hour + ":" + Minute + ":" + Second + ":" + MSecond
;現在時刻表示
pos 70,240:font msmincho,70,16
mes Time
;画面更新
redraw 1
wait 1
redraw 0
;背景削除
color:boxf 60,64,428,174:boxf 70,240,600,380
loop
| |
|
2009/7/10(Fri) 18:44:54|NO.26318
訂正
mb=(ct-nt)\100 ;ミリ秒
↓
mb=(ct-nt)\1000/10 ;ミリ秒
|
|
2009/7/12(Sun) 22:13:01|NO.26341
おお、そんな方法が!
やってみます。
|
|