Dxlibのマウス取得が遅延する??

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
LisetteLander
記事: 147
登録日時: 14年前
住所: 東京

Dxlibのマウス取得が遅延する??

#1

投稿記事 by LisetteLander » 13年前

マウスの動作が遅延します。
少なくとも、1/60秒以上遅れて移動してると思うのですが、どうしたらいいでしょうか?

CDeviceInputクラス

コード:

int CDeviceInput::GetMouseX(){
	int x,y;
	GetMousePoint(&x,&y);
	return x;
}

int CDeviceInput::GetMouseY(){
	int x,y;
	GetMousePoint(&x,&y);
	return y;
}
※このメソッド(マウスのX軸だけ、Y軸だけ取得するメソッド)の作り方ってこれでいいのでしょうか?

main.cpp

コード:

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE),SetGraphMode(X_WINDOW,Y_WINDOW,16),DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

		enum{
			GAMESTART,
			MAINGAME,
			GAMEEND=99
		}GAME_STATUS;
		
		CDeviceInput DeviceInput;

		GAME_STATUS=GAMESTART;//ゲーム内メインステータス
		while(ProcessLoop(GAME_STATUS)==0){
			switch(GAME_STATUS){
                                 case GAMESTART:
						DrawFormatString(DeviceInput.GetMouseX(),0,60000,"X->%d",DeviceInput.GetMouseX());
						DrawFormatString(0,DeviceInput.GetMouseY(),60000,"Y->%d",DeviceInput.GetMouseY());

						DrawLine(DeviceInput.GetMouseX(),0,DeviceInput.GetMouseX(),DeviceInput.GetMouseY()+30,60000,0);
						DrawLine(0,DeviceInput.GetMouseY(),DeviceInput.GetMouseX()+30,DeviceInput.GetMouseY(),60000,0);
						DrawCircle(DeviceInput.GetMouseX(),DeviceInput.GetMouseY(),10,60000,1);

						break;
				}
		}

		DxLib_End(); // DXライブラリ終了処理
        return 0;
}
添付ファイル
遅延?.zip
(635.16 KiB) ダウンロード数: 101 回

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: Dxlibのマウス取得が遅延する??

#2

投稿記事 by beatle » 13年前

使っているOSなどが分かりませんし、はっきりとは断言できませんが、裏画面に描画しているために1フレームぐらい遅延し、さらにWindows7/Vistaでゲームを遊ぶ時は3フレームの遅延に気をつけてなどのように、OSレベルで遅延します。
こういう遅延が積み重なっているのではと思います。

アバター
LisetteLander
記事: 147
登録日時: 14年前
住所: 東京

Re: Dxlibのマウス取得が遅延する??

#3

投稿記事 by LisetteLander » 13年前

なるほど、OSが関係していたのですね
少し調べてみたのですが
http://www.ouma.jp/ootake/delay-win7vista-j.html
こちらではソフト側からAeroの無効・許容フレームの設定ができるらしいのですが、Dxlibでの関数では対応していませんか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: Dxlibのマウス取得が遅延する??

#4

投稿記事 by softya(ソフト屋) » 13年前

まず、DXライブラリで裏画面を使う限り2フレーム遅延します。
それとモニタの描画で1フレームは遅延します。高画質回路とか有るテレビとかだと更に遅延します。
これは避けれませんので遅れても害のない様に作ることが望ましいです。

ちなみに、このソフトの追従の遅れは別の原因の気配がします。
遅延てボールがマウスに追従しない件ですよね?

[補足]
DXライブラリのGetMousePoint()を使ってみて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
LisetteLander
記事: 147
登録日時: 14年前
住所: 東京

Re: Dxlibのマウス取得が遅延する??

#5

投稿記事 by LisetteLander » 13年前

実行ファイルの「デスクトップ コンポジション」を無効にし、Geforceの遅延許容フレーム数を0にしたら治りました。
(といっても気にならない程度ですが)
BeetleさんSoft屋さんありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る