请问下directinput鼠标的移动坐标的偏差
- C/C++ code
bool Mouse::Read() { HRESULT hr; hr = pMouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), &MouseState); if (hr != DI_OK) { pMouseDevice->Acquire(); hr = pMouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), &MouseState); if (FAILED(hr)) { //MessageBox(NULL,"取得鼠标缓冲区数据失败.","警告",MB_OK|MB_ICONINFORMATION); return false; } } lX += MouseState.lX; lY += MouseState.lY; return true;}//主函数中while (msg.message != WM_QUIT) { if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } mouse.Read(); swprintf(tmpText, _T("(%d, %d)"), mouse.lX, mouse.lY); TextOut(hDC,0,0,tmpText,lstrlen(tmpText));}
问题是移动鼠标,再移回来坐标有点不一样,移动快点的话差的就更多了,哪出错了?
[解决办法]
你是累加的。 当然不一样。 除非你移回去和移回来的时间一样, 而且经过的像素点轨迹一样。
[解决办法]
因为你每次加了一个值吧,印象中需要建立一个缓冲区,DInput会把上一次读取到当前时间内的所有鼠标移动保存在缓冲区里面,计算鼠标坐标的时候需要把缓冲区的数据全部加起来。
很久没用DInput了,不知道有没有记错。
关键是,这里的MouseState是相对鼠标自身上一次的位置的位移,还是相对你上一次读取数据时鼠标位置的位移。
[解决办法]
我也遇到了这个问题,我现在获取鼠标的位置都是借用的GetCursorPos()+ScreenToClient() - -,真是枉费了DirectInput
[解决办法]