使用以下功能,使用游戏控制器库为你的游戏添加鼠标设备支持。我们在此处使用术语“鼠标设备”来描述传统的鼠标,以及触控板或轨迹球。
添加鼠标状态回调
游戏控制器库使用鼠标状态回调来通知游戏何时连接或断开鼠标。它一次仅支持一个鼠标状态回调。
- 要注册鼠标状态回调或将任何先前注册的回调替换为新的回调函数,请调用
Paddleboat_setMouseStatusCallback
函数。 - 要移除任何当前注册的回调,请在
statusCallback
参数中传递NULL
或nullptr
。 userData
参数是指向用户定义数据的可选指针。userData
参数将传递给回调函数。此指针在内部保留,直到被对Paddleboat_setMouseStatusCallback
的另一次调用更改。
void Paddleboat_setMouseStatusCallback(Paddleboat_MouseStatusCallback
statusCallback, void *userData)
鼠标状态回调函数的函数签名为
typedef void (*Paddleboat_MouseStatusCallback)(const Paddleboat_MouseStatus
mouseStatus, void *userData)
mouseStatus
枚举参数有三个可能的值
PADDLEBOAT_MOUSE_NONE
:当前没有连接鼠标设备。PADDLEBOAT_MOUSE_CONTROLLER_EMULATED
:连接的控制器正在模拟鼠标。PADDLEBOAT_MOUSE_PHYSICAL
:已连接一个或多个物理鼠标设备。(这些设备包括鼠标、触控板、轨迹球或其他类似设备。)
userData
参数包含上次调用 Paddleboat_setMouseStatusCallback
时指定的 userData
指针。userData
可能为 NULL 或 nullptr
。
并非所有控制器都模拟鼠标。控制器可以使用其中一个模拟摇杆或集成的触控板来模拟鼠标。
游戏控制器库仅报告来自单个鼠标设备的数据。物理鼠标设备优先于虚拟控制器鼠标设备。如果连接了物理鼠标,它将接管任何先前活动的虚拟控制器鼠标。
读取鼠标数据
调用 Paddleboat_getMouseStatus
函数以获取鼠标设备的状态。
Paddleboat_MouseStatus Paddleboat_getMouseStatus()
使用 Paddleboat_getMouseData
函数获取当前鼠标数据。如果成功读取数据,此函数将返回 PADDLEBOAT_NO_ERROR
,否则将返回相应的错误代码。
bool Paddleboat_getMouseData(Paddleboat_Mouse_Data *mouseData)
Paddleboat_Mouse_Data
结构包含有关以下方面的信息:
- 最新的鼠标输入事件时间戳
- 当前指针位置
- 鼠标按钮状态
- 鼠标滚轮状态
struct Paddleboat_Mouse_Data {
uint64_t timestamp;
uint32_t buttonsDown;
int32_t mouseScrollDeltaH;
int32_t mouseScrollDeltaV;
float mouseX;
float mouseY;
}
结构成员 | 描述 |
---|---|
timestamp
|
最新的鼠标输入事件的时间戳。时间戳值以微秒为单位,自时钟纪元开始计算。 |
buttonsDown
|
位字段,从位 0 开始的每个位表示按下状态(如果设置)。 |
mouseX mouseY
|
以像素坐标表示的鼠标位置。位置坐标的范围为 0.0 到屏幕宽度和高度。 |
mouseScrollDeltaH mouseScrollDeltaV
|
自上次调用 Paddleboat_getMouseData 以来累积的鼠标滚轮事件计数。这些值并非保证精确,仅表示特定方向上的滚轮活动。大多数鼠标有一个滚轮,在 mouseScrollDeltaV 中报告。如果鼠标有侧滚轮,则在 mouseScrollDeltaH 中报告。这些值在调用 Paddleboat_getMouseData 后在内部重置为 0 。 |
游戏控制器库在 paddleboat.h
接口头文件中为鼠标按钮定义了位掩码常量
enum Paddleboat_Mouse_Buttons {
PADDLEBOAT_MOUSE_BUTTON_LEFT = (1U << 0),
PADDLEBOAT_MOUSE_BUTTON_RIGHT = (1U << 1),
PADDLEBOAT_MOUSE_BUTTON_MIDDLE = (1U << 2),
PADDLEBOAT_MOUSE_BUTTON_BACK = (1U << 3),
PADDLEBOAT_MOUSE_BUTTON_FORWARD = (1U << 4),
PADDLEBOAT_MOUSE_BUTTON_6 = (1U << 5),
PADDLEBOAT_MOUSE_BUTTON_7 = (1U << 6),
PADDLEBOAT_MOUSE_BUTTON_8 = (1U << 7)
};
物理与虚拟鼠标设备
PADDLEBOAT_MOUSE_CONTROLLER_EMULATED
的 Paddleboat_MouseStatus
表示物理鼠标设备不存在,并且游戏控制器库正在使用连接的控制器模拟虚拟鼠标。设置了 PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE
标志的最低连接控制器索引用作虚拟鼠标。虚拟鼠标设备仅保证报告 mouseX
和 mouseY
坐标。虚拟鼠标设备可能会报告来自单个(左)鼠标按钮的按下操作,但这并非保证。