首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

请教下directinput鼠标的移动坐标的偏差

2012-02-21 
请问下directinput鼠标的移动坐标的偏差C/C++ codebool Mouse::Read() {HRESULT hrhr pMouseDevice-Ge

请问下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
[解决办法]
探讨
那还真是尴尬
顺便问下,上面不鼠标缓冲的代码在使用时若是鼠标左键一直按住,就只能获得一次的响应

C/C++ code


while (msg.message != WM_QUIT) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
……

热点排行