トップページ > 過去ログ > 記事閲覧
制限時間の動作
名前:せもぽ 日時: 2011/09/03 22:24

制限時間を2分に設定して徐々に残り時間を減らすプログラムを作りました しかし、なぜか1秒たつのが遅いです。時計と比較しても時計より1秒立つのが遅いです。 その原因がわからないため質問しました 以下がそのプログラムです #include "DxLib.h" LONGLONG timecnt; int timelimit; / メインプログラム int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { SetGraphMode( 800 , 600 , 16 ) ; //画面モードの変更 ChangeWindowMode( TRUE ) ; //ウインドウモードに変更 // DXライブラリ初期化処理 if( DxLib_Init() == -1 ){return -1 ;} //エラーが起きたら直ちに終了 SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面にする ChangeFontType( DX_FONTTYPE_EDGE ) ; //フォントタイプ変更 SetAlwaysRunFlag(TRUE); //非アクティブでも処理を行う timecnt = GetNowHiPerformanceCount(); timelimit = 120000000; while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){ ClsDrawScreen() ; //画面に描かれているものを一回全部消す //制限時間 if( GetNowHiPerformanceCount() - timecnt >= 10000 ){ timecnt = GetNowHiPerformanceCount(); timelimit -= 10000; } //制限時間表示 DrawFormatString( 5, 5, GetColor( 255 , 255 , 255) ,"%02d'%02d'%d%d", timelimit/60000000 , (timelimit%60000000)/1000000 , ((timelimit%60000000)%1000000)/100000 , (((timelimit%60000000)%1000000)%100000)/10000 ); ScreenFlip() ; //裏画面の内容を表画面に反映させる } DxLib_End() ; //DXライブラリ使用の終了処理 return 0 ; //ソフトの終了 }

Page: 1 |

Re: 制限時間の動作 ( No.1 )
名前:いっち 日時:2011/09/03 23:05

単にカウントダウンするだけであれば以下のような感じで良いのではないでしょうか? //- 以下、テストコード -// #include "DxLib.h" int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { ChangeWindowMode( TRUE ); if ( DxLib_Init( ) == -1 ) return -1; int timediff; LONGLONG timelimit = GetNowHiPerformanceCount() + 120000000; SetDrawScreen( DX_SCREEN_BACK ); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { timediff = int(timelimit - GetNowHiPerformanceCount()); ClearDrawScreen( ); DrawFormatString( 5, 5, GetColor( 255 , 255 , 255) ,"%02d'%02d'%d%d", timediff/60000000 , (timediff%60000000)/1000000 , ((timediff%60000000)%1000000)/100000 , (((timediff%60000000)%1000000)%100000)/10000 ); ScreenFlip( ); } DxLib_End( ); return 0; } ※追記 遅くなる理由は ScreenFlip が垂直同期を取るために10ms以上のウェイトをかけているのだと思います。 1回のループで消費した時間を計算して加減算しないと徐々にずれていくと思います。
Re: 制限時間の動作 ( No.2 )
名前:せもぽ 日時:2011/09/04 09:00

返信ありがとうございます。 ScreenFlipでウェイトがかかってるということという追記を見させていただきました。 1回のループで消費した時間を計算して加算させてあげたら遅れがだいぶ減りましたありがとうございます

Page: 1 |