|
ゲームの中の時間を表示させてみたくて、以下のように真似てみたんですが どうにも動きません、
http://www.ginshali.info/2014/07/blog-post.html
わかる方いませんか?
while TRUE if getkeystate(VK_ESC) then break lt = GETTIME() LtHour = G_TIME_HH LtMinute = G_TIME_NN LtSecond = G_TIME_SS if LENGTH(G_TIME_HH) = 1 then LtHour = "0" + G_TIME_HH if LENGTH(G_TIME_NN) = 1 then LtMinute = "0" + G_TIME_NN if LENGTH(G_TIME_SS) = 1 then LtSecond = "0" + G_TIME_SS // et = lt * (1440 / 70) EtSecond = int(et) mod 60 EtMinute = int(et / (60)) mod 60 EtHour = (int(et / (60 * 60)) mod 24) if LENGTH(EtHour) = 1 then EtHour = "0" + EtHour if LENGTH(EtMinute) = 1 then EtMinute = "0" + EtMinute if LENGTH(EtSecond) = 1 then EtSecond = "0" + EtSecond // BALLOON(EtHour + ":" + EtMinute + ":" + EtSecond + "<#CR>" + lt + "<#CR>" + LtHour + ":" + LtMinute + ":" + LtSecond , G_MOUSE_X+8, G_MOUSE_Y, 3) wend
|
No.4481 2017/09/30(Sat) 21:36:00
|
☆ Re: 時間計算さんについて / Liners |
|
|
当方では、問題なく動きます。現状では約20秒単位の表示ですが…
UWSCの時間計算は、基準日からの経過日数をセットします。 よって、より細かい時間単位でUWSC風に書くならこんな感じかなぁ。
基準時間 = gettime() + (G_TIME_ZZ / 1000)
while !getkeystate(VK_ESC) gettime(((gettime() + (G_TIME_ZZ / 1000) - 基準時間) * (1440 / 70)) / 86400) BALLOON(G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2 , G_MOUSE_X+8, G_MOUSE_Y, 3) sleep(0.02) wend
|
No.4482 2017/09/30(Sat) 23:49:17
|
|
☆ Re: 時間計算さんについて / はる |
|
No.4483 2017/10/01(Sun) 05:45:33
|
|
☆ Re: 時間計算さんについて / はる |
|
|
まさかと思いましたが、ズレてしまうのは私の環境の"せい"で Linersさんはズレていないとか・・・
|
No.4484 2017/10/01(Sun) 05:49:40
|
|
☆ Re: 時間計算さんについて / Liners |
|
|
>どうにも動きません、 ではないのですか? 時間がズレしまうのは別問題ですよ。
それに「ネットゲーム関係の質問はご遠慮ください」なので、打ち切ってもいいのですが、 基本的な時間計算の内容が含まれるので、HPとほぼ同じ表示ができるところまでとします。
>何が原因なのか途方にくれている状態です。 計算方法[時間の起点]が違うからです。
JavaScriptのDate.getTime()では世界協定時(UTC)1970年01月01日 00:00:00からの経過ミリ秒(UNIX時間)。
UWSCのGETTIMEは「2000年1月1日からの秒数を返す」(日本標準時)
ですので、この差を埋める必要があります。 基準日を"1970/01/01 00:00:00"とした上で、日本標準時との誤差9時間[32400秒]を加味すると、 UWSCのGETTIMEから見たUTCの起点は、utc = gettime(0,"1970/01/01 00:00:00") + 32400 となります。
更にミリ秒の考慮と、値がマイナス値あることに注意してください。 これらを基にしたサンプルは、こんな風になるでしょう。
utc = gettime(0,"1970/01/01 00:00:00") + 32400
while !getkeystate(VK_ESC) lt = (GETTIME() + (G_TIME_ZZ / 1000) - utc) * (1440 / 70) LtSS2 = format(int(lt) mod 60, 2) LtNN2 = format(int(lt / 60) mod 60, 2) LtHH2 = format(int(lt / (60 * 60)) mod 24, 2) BALLOON(replace(LtHH2 + ":" + LtNN2 + ":" + LtSS2, " ", "0"), G_MOUSE_X+8, G_MOUSE_Y, 3) sleep(0.05) wend
|
No.4487 2017/10/01(Sun) 15:58:57
|
|
☆ Re: 時間計算さんについて / miles |
|
|
(記事を削除しました。あしからず...) 回答はLinersさんの通りです。
毎回、当日を基準日として
lt = G_TIME_HH*(60*60) + G_TIME_NN*60 + G_TIME_SS + G_TIME_ZZ/1000 et = lt * (1440 / 70)
で計算したら、うまく行きましたが、正しい計算方法ではありません。
|
No.4488 2017/10/01(Sun) 18:28:12
|
|
☆ Re: 時間計算さんについて / はる |
|
|
ありがとうございます。 質問の仕方が悪かったこと申し訳ありませんでした。 時間計算ですが、もしやとは思っていましたがUTCが関係あったんですね。 UTCについては実はYahoo知恵袋に質問していました。 勉強になりました。 色々とありがとうございました。
|
No.4489 2017/10/01(Sun) 20:40:36
|
|
☆ Re: 時間計算さんについて / はる |
|
|
引き続きですが、BALLOONで詰まってしまいました。 以下のような式でBALLOON関数に式or型が合ってない”のようなエラーがでます。 自分では合っているつもりなのですが、教えていただけないでしょうか。 よろしくお願い致します。
背景を透明に、文字だけを表示するのが、目的です。
Clock(100, 5, 16, "MS ゴシック", "$FFFFF0")
PROCEDURE Clock(pointX, pointY, nFontSize, cFontName, cFontColor) while TRUE BALLOON("時計", pointX, pointY, 0, nFontSize, cFontName, cFontColor, $0, -2)) wend FEND
|
No.4497 2017/10/02(Mon) 22:31:23
|
|
☆ Re: 時間計算さんについて / はる |
|
No.4499 2017/10/02(Mon) 22:40:18
|
|