こんちにちは.
この度,マウスを用いてファストパーソンシューティングゲームのような視点操作を実現したいと思ったのですが,
SetMouseDispFlag関数でカーソルを非表示にしても,ChangeWindowMode関数で窓を小さくしている時に,
勢いよくマウスを動かすと画面外にカーソルがチラチラ見えて煩わしいことになってしまいますf^^;
以下に問題のソースコードを掲載します.
#include"DxLib.h"
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
if (DxLib_Init() == -1) {
return -1;
}
ChangeWindowMode(TRUE);
SetUseZBuffer3D(TRUE);
SetWriteZBuffer3D(TRUE);
SetDrawScreen(DX_SCREEN_BACK);
SetMouseDispFlag(FALSE);
int pos_x, pos_y;
const int ORIGIN_X = 320, ORIGIN_Y = 240, ROT_CONST = 1000;
float delta_h, delta_v, rotate_h = 0.0f, rotate_v = 0.0f;
SetMousePoint(ORIGIN_X, ORIGIN_Y);
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
clsDx();
ClearDrawScreen();
GetMousePoint(&pos_x, &pos_y);
delta_h = pos_x - ORIGIN_X;
delta_v = pos_y - ORIGIN_Y;
delta_h /= ROT_CONST;
delta_v /= ROT_CONST;
rotate_h += delta_h;
rotate_v += delta_v;
//マウスカーソルを基点に復帰
SetMousePoint(ORIGIN_X, ORIGIN_Y);
printfDx("delta.x = %f, delta.y = %f\n", delta_h, delta_v);
printfDx("rotate.x = %f, rotate.y = %f", rotate_h, rotate_v);
SetCameraPositionAndAngle(VGet(0.0f, 0.0f, 0.0f), rotate_v, rotate_h, 0.0f);
DrawSphere3D(VGet(0.0f, 0.0f, 600.0f), 80.0f, 16, GetColor(255, 0, 0), GetColor(0, 0, 0), FALSE);
DrawSphere3D(VGet(0.0f, 0.0f, -600.0f), 80.0f, 16, GetColor(0, 255, 0), GetColor(0, 0, 0), FALSE);
DrawSphere3D(VGet(600.0f, 0.0f, 0.0f), 80.0f, 16, GetColor(0, 0, 255), GetColor(0, 0, 0), FALSE);
DrawSphere3D(VGet(-600.0f, 0.0f, 0.0f), 80.0f, 16, GetColor(255, 0, 255), GetColor(0, 0, 0), FALSE);
ScreenFlip();
}
DxLib_End();
return 0;
}
カーソルは毎フレーム 基点に復帰しているのでこれ以上間隔を詰めることができません.
窓を小さくした状態でカーソルを激しく動かしても,窓の外にカーソルが飛び出ない方法はないでしょうか.
ご回答よろしくお願い致しますm(_ _)m