HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0322
Atmosphireクリック回数と進行時間の同時進行8解決


Atmosphire

リンク

2012/3/22(Thu) 15:23:01|NO.45535

クリックを一定時間内にどれだけ押せるか、という単純なゲームを作っています。
そのためには時間計測と回数計測を同時進行で行わなくてはなりません。
自分の作ったソースでは回数計測はされるのですが、時間の進み方がおかしくなります。
その点を含め、皆様の方法、私のソースでの動作の原因などをご教授ください。


button "start",*start button gosub "push",*push stop *start time=10 repeat title "終了まで"+time+"秒、現在"+a+"回" await 1000 time=time-1 if time=0:break loop *push a=a+1 return
変数説明
a:回数
time:残り時間



この記事に返信する


f(残業中)

リンク

2012/3/22(Thu) 17:55:00|NO.45536

このやり方では駄目だな。

ボタンでジャンプしたら、awaitで止まってる処理が中断する。
それが原因。


timegettime,timeBeginPeriod,timeEndPeriodあたりのAPIと、
await 0を組合せてstickかgetkeyでクリックをカウントするのが
手っ取り早いだろう。



Atmosphire

リンク

2012/3/22(Thu) 20:11:21|NO.45537

原因の提示とさらに参考になる回答ありがとうございます。
参考にさせていただきます。



Atmosphire

リンク

2012/3/22(Thu) 20:49:08|NO.45540

大変申し訳ないのですが、簡単にで良いのでソースを書いていただけないでしょうか?



てれてれ

リンク

2012/3/22(Thu) 21:19:38|NO.45541

この方法だと外部DLLを使わなければなりませんので少しハードルが高かったかもしれません。

#uselib "winmm.dll" #cfunc timeGetTime "timeGetTime" button "start",*start button gosub "push",*push stop *start time=10 repeat title "終了まで"+time+"秒、現在"+a+"回" nTime = timeGetTime() //Windowsを起動してからの時間を取得 repeat if timeGetTime()-nTime >= 1000 : break //↑で取得した時間から1000ミリ秒経過したらループを抜ける await 10 loop time=time-1 if time=0:break loop dialog ""+a+"回" stop *push a=a+1 title "終了まで"+time+"秒、現在"+a+"回" return



Atmosphire

リンク

2012/3/23(Fri) 13:29:40|NO.45548

ありがとうございます。APIを使うやつですか?
確かに難しいですね・・・。今までは教えていただいた
timeGetTimeを使うと「サポートされていない」と出たのですが、
外部DLLを使っていなかったせいでしょうね。を参考にさせていただきます。



たんす

リンク

2012/3/23(Fri) 21:12:38|NO.45556

gettimeでPCの時刻を取得してみては?

button "start",*start button gosub "push",*push stop *start a=0 time=10.0 set_time=gettime(5)*60+gettime(6) do await 10 current_time=gettime(5)*60+gettime(6) title "終了まで"+(time - (current_time - set_time))+"秒、現在"+a+"回" until (current_time - set_time)>=time stop *push a=a+1 return



匿名希望

リンク

2012/3/23(Fri) 23:39:12|NO.45560

たんすさんのスクリプトがわかりやすいだろうと思うのですが
定時(59分と00分)をまたぐ場合、無限ループに陥ってしまうので注意が必要です

具体的には

if current_time < set_time : current_time += 3600

とか



たんす

リンク

2012/3/24(Sat) 00:25:06|NO.45561

匿名希望さん。ご指摘ありがとうございます。

仰られたとおり、「分+秒」でしか比較していませんので「時」をまたぐ場合の例外処理をしていません。
current_timeを補正されていますが、ループごとに毎回取得している値を補正するよりは、
基準値(set_time)を補正してしまうほうが良いかなと思いまして修正を書いておきます。

current_time=gettime(5)*60+gettime(6) ;分*60+秒 if current_time < set_time:set_time-=3600 ;追加分 title "終了まで"+(time - (current_time - set_time))+"秒、現在"+a+"回"



ONION software Copyright 1997-2023(c) All rights reserved.