跨平台輸入設備程式庫,包含鍵盤 滑鼠 搖桿 觸控 ,支援 cmake 編譯
到 Releases · wgois/OIS · GitHub 抓取,我取得時是 1.5 版
看一下 demos\OISConsoleDemo 子目錄中的範例大概就知道的怎麼用,以下摘錄範例的 Win 平台做簡要說明
// OIS 的 buffered 模式事件處理程序,這裡加了 鍵盤 滑鼠 搖桿 // 依自己須要 override 所須事件虛擬函數 class EventHandler : public KeyListener, public MouseListener, public JoyStickListener { // 鍵盤按下時的事件 bool keyPressed(const KeyEvent& arg) override { std::cout << " KeyPressed {" << std::hex << arg.key << std::dec << "} || Character (" << (char)arg.text << ")" << std::endl; if(arg.key == OIS::KeyCode::KC_UP) { std::cout << "up key!\n"; } return true; } }handler; main() { hWnd = // 產生一個 Win 視窗 // ParamList 是一個 std::multimap<std::string, std::string> ParamList pl; std::ostringstream wnd; wnd << (size_t)hWnd; // 把要給 OIS 的視窗代號放在 pl pl.insert(std::make_pair(std::string("WINDOW"), wnd.str())); // 產生 OIS g_InputManager = InputManager::createInputSystem(pl); //Lets enable all addons that were compiled in: g_InputManager->enableAddOnFactory(InputManager::AddOn_All); // 產生代表鍵盤的的物件 g_kb = (Keyboard*)g_InputManager->createInputObject(OISKeyboard, true); // 設定鍵盤的事件處理程序 g_kb->setEventCallback(&handler); /* --- 看範例如何產生其他輸入物件,概念上和產生鍵盤物件 意思一樣 --- */ // 訊息廻圈 while(appRunning) { MSG msg; while(PeekMessage(&msg, nullptr, 0U, 0U, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } /*--- 每項輸入設備都要處理一次才會獲得最新狀態 ---/ // 取得鍵盤狀態 if(g_kb) { g_kb->capture(); if(!g_kb->buffered()) // 是否關閉鍵盤的 buffered 模式 handleNonBufferedKeys(); } /*--- 其它輸入設備也要處理,參見範例 ---/ } }
OIS 的輸入設備 buffered 模式為 true 時才會叫用 handler 事件處理程序,否則得自行再寫處理程式,如上例中的 handleNonBufferedKeys()。
以鍵盤來說有沒有 buffered 的差別在按下按鍵時,系統會不斷送出按鍵訊息,若有 buffered 只會呼叫 handler 事件處理程序一次,若你想要自己檢查鍵盤狀態,可用 g_kb->setBuffered(false) 關掉。
沒有留言:
張貼留言