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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1021
MNIGHTHSPTVでのawait8解決


MNIGHT

リンク

2012/10/21(Sun) 19:54:13|NO.50138

64bit版windows7にて、
#include "hsptv.as"
を実行するとawaitが不安定になるようです。
windowsXPでは問題ありませんでした。

他の方のPCでの動作状況を知りたいです。



この記事に返信する


流星群

リンク

2012/10/21(Sun) 22:33:21|NO.50147

自分のwindows 7の64bitでは、
hsptv.asに限らず
HSP全般でawait 1でFPSが160とか出てみたりします。
(他PCで同じ物を実行してもFPSの数値はこんなになりません。
他には特に異常等はないです)
どう不安定なんでしょうか?
動作が止まったり…ということなら
自分はなりませんね。



MNIGHT

リンク

2012/10/21(Sun) 22:42:34|NO.50149

例えば、await 20としてもFPSが50にならず、32になりました。前バージョンのawaitの動作に似ています。
hsptv.asをインクルードしなければFPSが50になります。

OSとは別の問題でしょうか・・・?



流星群

リンク

2012/10/22(Mon) 23:16:13|NO.50160

どうなんでしょうかね…
自分が実行しても、
使ったのはこのサイトのfps測るソースのawaitを20にしたものです↓
http://very.skr.jp/page_tips/game06_o1.html
自分も、hsptv.asをインクルードした場合、
50から32になりました。
OSの問題ですかね…
32bitで正常に動けば
64bitだからと考えられますが…
32bitのwin7が無いのでどうとも言えないです。
7の問題か、win7 64bitのみの現象なのかもわかんないですね



暇人

リンク

2012/10/23(Tue) 23:45:32|NO.50184

2012/06/14 3.31β1
await命令の時間待ちを高精度タイマーによる処理に変更

多分これで通常のHSPは改善されたけど
hsptvは以前のままでawit 20がawait 15*2と同等の時間待ちしてる


;#include "hsptv.as" repeat 20 w++ wait 1 tim=gettime(7) repeat 20 await w loop timcnt(cnt)=(gettime(7)-tim+1000)\1000 mes strf("await %2d //%5.2f ms",w,double(timcnt(cnt))/20) loop



MNIGHT

リンク

2012/10/24(Wed) 01:04:17|NO.50187

XPと64bit版win7で待ち時間が違いました
XPではawait 10*nになって、win7ではawait 15*nでした

正確に待つには何かFPSを保つ処理を作るか、await 30あたりで妥協するしかなさそうですね



暇人

リンク

2012/10/24(Wed) 01:54:45|NO.50188

タイマー精度を上げたSleepとawaitを置き換えてみる

#include "hsptv.as" #module "mod_await" #uselib "KERNEL32.DLL" #func _Sleep "Sleep" sptr #uselib "winmm.dll" #func _timeBeginPeriod "timeBeginPeriod" sptr #func _timeEndPeriod "timeEndPeriod" sptr #cfunc _timeGetTime "timeGetTime" #undef await #deffunc await int w if tBP { _Sleep limit(w-(_timeGetTime()-tim),0,w) await@hsp 0 tim=_timeGetTime() }else{ tBP=1 _timeBeginPeriod 1 tim=_timeGetTime() } return #deffunc timeEndPeriod onexit if tBP { _timeEndPeriod 1 } return #global repeat 20 w++ wait 1 tim=gettime(7) repeat 20 await w loop timcnt(cnt)=(gettime(7)-tim+1000)\1000 mes strf("await %2d //%5.2f ms",w,double(timcnt(cnt))/20) loop



暇人

リンク

2012/10/24(Wed) 19:56:21|NO.50202

一回目のawaitがSleepしてなかったのを修正

#include "hsptv.as" #module "mod_await" #uselib "KERNEL32.DLL" #func _Sleep "Sleep" sptr #uselib "winmm.dll" #func _timeBeginPeriod "timeBeginPeriod" sptr #func _timeEndPeriod "timeEndPeriod" sptr #cfunc global GTime "timeGetTime" #undef await #deffunc await int w if tBP=0 { tBP=1 _timeBeginPeriod 1 tim=GTime() } _Sleep limit(w-(GTime()-tim),0,w) await@hsp 0 tim=GTime() return #deffunc timeEndPeriod onexit if tBP { _timeEndPeriod 1 } return #global c=1 repeat 20 w++ await 10 //awaitからawaitの時間を使うので ttim=GTime() tim=gettime(7) repeat c await w loop ttimcnt(cnt)=GTime()-ttim timcnt(cnt)=(gettime(7)-tim+1000)\1000 mes strf("await %2d //timeGetTime() %5.2fms //gettime(7) %5.2fms",w,double(ttimcnt(cnt))/c,double(timcnt(cnt))/c) loop
後gettime(7)は本来の精度の1/10ぐらいしかないのでtimeGetTimeも使用



流星群

リンク

2012/10/24(Wed) 23:17:15|NO.50206

>>MNIGHTさん
>>正確に待つには何かFPSを保つ処理を作るか、await 30あたりで妥協するしかなさそうですね
FPSを保つ処理なら過去の質問にありましたから
await 30で妥協するよりはそちらのほうが良いかと…
win7でちゃんと使えるかわかりませんが…



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