2017-04-05 91 views
0

(請原諒我的簡寫,因爲這是從內存中)我有類似代碼:如何在OpenSceneGraph鍵盤輸入事件中處理區分大小寫?

bool myclass::handle(event ea){ 
    switch (ea.getEventType()){ 
    case(osgGA::KEYDOWN): 
     switch (ea.getkey()) 
     { 
     case (osgGA::KEY_Lshift): 
      down = true; 
      break; 
     case (osgGA::KEY_W): 
      forward = true; 
      break; 
     } 
     return false; 

    case(osgGA::KEYUP){ 
     switch (ea.getkey()) 
     { 
     case (osgGA::KEY_Lshift): 
      down = false; 
      break; 
     case (osgGA::KEY_W): 
      forward = false; 
      break; 
     } 
     return false;   
    } 

我打印ea.getkey(),當我按「W」,我得到了它移動的預期行爲前鋒。但是,如果我按下'shift'然後放開'w',我會調試:「KEYUP:W」。請注意,它是大寫,我繼續前進,直到小寫'w'被按下並釋放。

我是否希望只使用基本的C++函數將所有內容都轉換爲小寫?我只是試圖使用標準的WASD運動與Space/L-shift一起在我的環境中上下移動。

回答

1

當您按下某個鍵時,osg會使用相應的鍵碼創建一個事件,該鍵碼對於字母或其對應的大寫字母不同。
osgGA::KEY_W它只是相當於小寫「W」(119 ASCII碼)的枚舉值,而「W」有碼87

所以,如果你想獲得低層或大寫按鍵,簡單的寫像這樣:

if (ea.getEventType() == osgGA::GUIEventAdapter::KEYDOWN) 
{ 
    if (ea.getKey() == osgGA::GUIEventAdapter::KEY_W || ea.getKey() == 'W') 
    { /*code when either w or W is pressed*/ } 
} 
+0

我想我必須檢查每個按鍵的兩種組合(如果我決定保持在最終控制中的轉變)。感謝您的確認! – user3000724

相關問題