getrawinputdata鼠标_获取鼠标的原始移动值

本文介绍了如何使用GetRawInputData获取鼠标的原始移动值,以解决在游戏开发中,特别是第一人称视角游戏时,鼠标转动限制问题。通过WM_MOUSEMOVE消息获取的数据受限于屏幕分辨率,而GetRawInputData则能提供高精度的原始数据,适用于高分辨率鼠标设备。
摘要由CSDN通过智能技术生成

获取鼠标的原始移动值,应用于类似cs中鼠标移动,控制相机的转向问题!

最近在模仿cs的部分功能,做一个小射击游戏。用w-a-s-d控制相机在平面上移动,用鼠标控制转向时,遇到一个问题。获取鼠标位置时,使用的是GetCursorPos方法,这个方面返回鼠标的当前屏幕坐标,这样就存在一个问题:假设鼠标当前坐标p0(x,y) =(300, 300)移动鼠标向右,此时p1(500, 400),这样有个

delta(500-300, 400 - 300) = (200, 100),此时,鼠标向右移动,对应相机在3D坐标中的方向,应该是以y轴为中心,顺时针旋转,但此时能转动的最大角度就是 ScreenWidth - p0.x,如果想一直不停地转圈圈,则不能实现。

解决方法有两个:

1、当检测到鼠标位置超出范围时,将其重新设置成屏幕中心(类似一个相对小的值),这样当下次鼠标继续向一个方面时,能够重新利用delta值转动相机

/*if (curPos.x || curPos.x >= VAL_WINDOW_WIDTH)

{

curPos.x = VAL_WINDOW_WIDTH/2;

}

if (curPos.y || curPos.y >= VAL_WINDOW_HEIGHT)

{

curPos.y = VAL_WINDOW_HEIGHT/2;

}*/

SetCursorPos(curPos.x, curPos.y);

2、利用下面的方法,获取鼠标的移动的相对位置,比如说鼠标当前在位置p0(x0,y0),当我们移动鼠标时,鼠标值会有个相对前一个点位置的变化值

pDelta(xdelta, ydelta),这样就可以直接获取这个值来转动相机,而不需要利用方法1来计算相对位置。获取方法如下,转自msdn

Introduction

A standard computer mouse returns data at 400 dots per inch (DPI), whereas a high-definition mouse generates data at 800 DPI or greater. This makes input from a high-definition mouse much more precise than that from a standard mouse. However, high-definition data cannot be obtained through the standard WM_MOUSEMOVE messages. In general, games will benefit from high-definition mouse devices but games that obtain mouse data using just WM_MOUSEMOVE won't be able to access the full, un-filtered resolution of the mouse.

A number of companies ar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值