我自己学着用directx游戏编程,做了一个蜘蛛纸牌,但是发现通过GetCursorPos(&point);取得的坐标不准确?但是我发现directinput中好像鼠标没有坐标,只有相对坐标?我在百度中没有搜索到答案,是不是我太小白了?方式有问题,希望大家能够给我点帮助,谢谢啦!

解决方案 »

  1.   

    现在想到一个办法就是如果需要判定鼠标坐标就先使用函数:GetCursorPos(&point);取得屏幕桌表,然后调用ScreenToClient(HWND,POINT)转化成客户区坐标,这样可以。
      

  2.   

    有两种方法可得到windows的鼠标信息,从DirectInput中或通过一条叫做GetCursorPos()的Win32函数.主要的区别在于DirectInput提供的是相对坐标,即相对于上次位置的当前位置;而GetCursorPos()将提供屏幕坐标系的绝对坐标.绝对坐标对GUI很有用;而相对坐标则适合于没有光标的鼠标,例如在FPS游戏中的环视(译者:即光标位置固定的情况).然而你可以由绝对坐标计算出相对坐标,反之亦然.
      

  3.   

    可能是获取坐标不是相对于应用程序界面的,可以采用mapWindowPoints进行窗口之家的坐标转换,
    dx下还有一点需要注意的是hr = m_pVW->put_MessageDrain((OAHWND)GetWindowLong(m_hWnd,GWL_HWNDPARENT));//让DX窗口响应鼠标事件
      

  4.   

    在3D场景中,2D的鼠标坐标必须通过光线跟踪方式计算出在3D场景中的射线,然后计算射线跟所有3D物体的交点,取最近相交的3D物体。想更加细致的话,还要计算出这个交点是3D物体的哪个面,以及在面上的具体的点。