用glfw處理使用者鍵盤輸入有兩種方式,一種是使用**函式,一種是在每一次遊戲迴圈中處理。這兩種方法的最大差別在於是否能連續獲得鍵盤輸入,第二種方法可以。
glfw官方文件 對這種方法的講解很詳盡,下面只簡單記錄一下要點。
我們只需要自定義**函式key_callback,並在進入遊戲迴圈前呼叫函式glfwsetkeycallback(window, key_callback)
即可。下面簡單介紹**函式包含的內容。
函式頭為void key_callback(glfwwindow* window, int key, int scancode, int action, int mods)
,其中,
key
為按鍵,例如glfw_key_up,如果敲下的鍵不能被glfw識別,比如play和e-mail,key值就是glfw_key_unknown;
scancode
是每個平台自定義的表示按鍵的**,當key值為glfw_key_unknown時scancode會被用來識別鍵,否則scancode會被忽略;另外它可以和key一起用來獲得鍵的名字const char* key_name = glfwgetkeyname(glfw_key_w, 0);
,第二個引數就是scancode。scancode可以通過const int scancode = glfwgetkeyscancode(glfw_key_x);
獲得;
action
代表動作型別,有
其中需要特別注意的是glfw_repeat
。引用stack overflow上的乙個回答來解釋它的意義:
也就是說如果我們希望在遊戲中通過鍵盤控制乙個人物的移動的話,是不能依靠glfw_repeat讓人物跑起來的,乙個原因是移動速度不由程式設計師控制,容易引起遊戲混亂,另乙個原因是,如果像下面這樣定義**函式:
void key_callback(glfwwindow* window, int key, int scancode, int action, int mods)
}
連續按「↑」鍵會發現攝像機位置先上移乙個camera_speed的長度,卡頓一會兒,才開始連續向上移動的。當遊戲人物逃避boss追殺時,我們應該不希望他先呆住一兩秒再跑吧?因此要實現連續移動的效果就需要用到第二種方法,而非通過**函式。
mods
是"modifier bits"的簡寫,有
通過key和mods的組合就可以實現諸如ctrl+n之類的操作。
這種方法的使用方式如下:
while (!glfwwindowshouldclose(window))
processinputs
中包含的要素和上面介紹的**函式差不多,只是用到了另乙個glfw的函式glfwgetkey
。最終效果上,這個函式返回任意時間某個鍵的狀態,就是這個函式使得連續效果得以實現。processinputs可以這樣實現:
void processinputs(glfwwindow* window)
除了使用者的操作外,函式glfwsetinputmode也會影響到glfwgetkey的返回值。
void glfwsetinputmode(glfwwindow* window, int mode, int value)
當mode為glfw_sticky_keys
且value為glfw_true
時,只要按下乙個鍵,那麼glfwgetkey返回的該鍵的狀態一定是按下的,哪怕在glfwgetkey函式被呼叫前這個鍵又被鬆開了。也就是說,當我們只關心鍵是否被按下過、而不關心它是何時被按下的時,就可以設定這個狀態。
glfw可以接受unicode字元流作為輸入,從而允許程式處理來自使用者的文字輸入。我們可以將接受的unicode字元轉換成ascii等其他格式的字元。
在遊戲迴圈前需要呼叫函式glfwsetcharcallback(window, character_callback);
**函式的函式頭為void character_callback(glfwwindow* window, unsigned int codepoint)
OpenGL學習筆記
我是一名ios開發者,opengl是乙個比較重要的技術。所以就此開啟我的菜鳥之路。opengl open graphics library 是乙個跨程式設計語 言 跨平台的程式設計圖形程式接 它將計算機的資源抽象稱為乙個個opengl的物件,對這些資源的操作抽象為乙個的opengl指令.direct...
OpenGL學習筆記
數學基礎 叉積mv矩陣 文章內容主要來自 計算機圖形學程式設計 使用opengl和c 光柵化過程確定了用以顯示3個頂點所確定的三角形的所有畫素需要繪製的位置 光柵化過程開始時先對三角形的每對頂點進行插值 如果光柵化過程到此為止,那麼呈現出的影象將會是線框模型 使用 glpolygonmode gl ...
OpenGL學習筆記
因工作需要,這些天要研究opengl。我給自己定的目標是 1.節前能熟悉opengl基礎知識 2.確定一款以opengl為基礎的gui 3.學習如何使用該gui的控制項繪製3d選單 今天找到幾個 嵌入式系統使用的是opengl es,是桌面opengl的乙個子集,定義了一系列靈活高效的圖形加速介面。...