試了試 glfw 對手柄支持的幾個 api

最近給自己買了個 switch,由於"獨樂樂不如衆樂樂",又新購入了一個“良值”牌的手柄。手柄到貨的時候我還在公司,沒法用 switch 實機測試手柄好用不好用, 就打算用 windows 自帶的手柄檢測軟件測試一下。
插到 PC 上, 欣喜的發現啥驅動都不用安裝(可能是自動安裝好了),手柄就識別了。用 windows 自帶的軟件測試了幾下,沒有啥問題,網上說的十字鍵串鍵位的問題也沒有。
由於 windows 的測試軟件都能識別手柄,我就在想自己寫的代碼是不是應該也能識別這個手柄呢。打算寫個代碼試試。
說到對硬件設備訪問的支持,我第一反應是 SDL2 這個庫。但是由於手頭線程的工程是 一個 glfw 的 OpenGL 工程,就暫時放棄了 SDL2,先用 glfw 試試吧。

GLFW 官網文檔 非常詳細.搜索 JoyStick 相關的幾個 api 就出來了。

glfw JoyStick 相關文檔的鏈接

幾個 api 非常簡潔

  1. glfwJoystickPresent
    int present = glfwJoystickPresent(GLFW_JOYSTICK_1);
    用於檢測手柄是否連接

  2. glfwGetJoystickAxes
    int count;int count;
    const float* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &count);
    用於檢測手柄方向軸的數量,返回到 count 裏。
    返回值是 每個軸 當前的數值

  3. glfwGetJoystickButtons
    int count;
    const unsigned char* axes = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &count);
    用於檢測手柄按鍵的數量,返回到 count 裏。
    返回值 是 每個按鍵是否被按下了

  4. glfwGetJoystickName
    const char* name = glfwGetJoystickName(GLFW_JOYSTICK_1);
    返回手柄的名字

  5. glfwSetJoystickCallback(joystick_callback)

    void joystick_callback(int joy, int event)
    {
    if (event == GLFW_CONNECTED)
    {
    // The joystick was connected
    }
    else if (event == GLFW_DISCONNECTED)
    {
    // The joystick was disconnected
    }
    }

用於設置手柄的連接、斷開回調。

一共就這麼5個 api ,完全足夠根據這幾個 api 寫一個健壯的手柄狀態管理器了。自己寫了個控制檯輸出的小程序,插拔手柄,測試按鍵,基本沒啥問題。雖然沒什麼技術含量,但是覺得挺有趣的。

有了這個”良值“手柄,以後自己再鼓搗啥小程序小遊戲,就可以考慮用支持手柄操作了。SDL2 對手柄支持的 api 還沒看,猜測也差不多?
glfw 對手柄的支持非常簡潔,但是缺點是比較依賴於 OpenGL .如果純論移植性,SDL庫肯定更勝一籌。有空可以折騰一下看看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章