添加鼠标设备支持

使用以下函数,通过游戏控制器库为您的游戏添加鼠标设备支持。我们在此处使用“鼠标设备”一词来描述传统鼠标以及触控板或轨迹球。

添加鼠标状态回调

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

  • 要注册鼠标状态回调或将任何先前注册的回调替换为新的回调函数,请调用 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_MouseStatusPADDLEBOAT_MOUSE_CONTROLLER_EMULATED 表示没有物理鼠标设备,并且游戏控制器库正在使用连接的控制器模拟虚拟鼠标。具有 PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE 标志的最低连接控制器索引用作虚拟鼠标。虚拟鼠标设备仅保证报告 mouseXmouseY 坐标。虚拟鼠标设备可能会报告单个(左)鼠标按键的按下,但这不作保证。