添加鼠标设备支持

使用以下功能,使用游戏控制器库为你的游戏添加鼠标设备支持。我们在此处使用术语“鼠标设备”来描述传统的鼠标,以及触控板或轨迹球。

添加鼠标状态回调

游戏控制器库使用鼠标状态回调来通知游戏何时连接或断开鼠标。它一次仅支持一个鼠标状态回调。

  • 要注册鼠标状态回调或将任何先前注册的回调替换为新的回调函数,请调用 Paddleboat_setMouseStatusCallback 函数。
  • 要移除任何当前注册的回调,请在 statusCallback 参数中传递 NULLnullptr
  • 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_EMULATEDPaddleboat_MouseStatus 表示物理鼠标设备不存在,并且游戏控制器库正在使用连接的控制器模拟虚拟鼠标。设置了 PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE 标志的最低连接控制器索引用作虚拟鼠标。虚拟鼠标设备仅保证报告 mouseXmouseY 坐标。虚拟鼠标设备可能会报告来自单个(左)鼠标按钮的按下操作,但这并非保证。