Russian Qt Forum
Апрель 29, 2024, 02:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: XLib, Mouse and keyboard events. Глюки  (Прочитано 4064 раз)
G-virus
Гость
« : Март 10, 2013, 23:22 »

Здравствуйте. Связался с XLib, построил контекст своего приложения под линукс на нем. Дошло дело до обработки событий мыши и клавиатуры. Написал вот такой код
Код
C++ (Qt)
void event_loop()
{
   fullscreen();
   XEvent event; bool shutdown = true;
 
   XSelectInput(dpDisplay, win, PointerMotionMask| KeyPressMask | KeyReleaseMask);
 
   initializeGL(dpDisplay, win);
   initializeAL();
 
   while(shutdown)
   {
       XNextEvent(dpDisplay, &event); // Get next event in queue and copy it to XEvent structure
       switch (event.type)
       {                                                                                                            
           case Expose: paintGL(); break; // Redraw event
           case ConfigureNotify: resizeGL(event.xconfigure.width, event.xconfigure.height); break; // Window resize event
           case KeyPress:
             if(event.xkey.keycode == XK_Escape)
                 shutdown = false;
             else
             {
                 keyDown(event.xkey.keycode);
                 resizeGL(event.xconfigure.width, event.xconfigure.height);
                 paintGL();
             }
             break;
           case MotionNotify:
                 mouseMove(event.xmotion.x, event.xmotion.y);
                 resizeGL(event.xconfigure.width, event.xconfigure.height);
                 paintGL();
                 break;
       }
   }
   destroyAL();
   destroyGL();
}
 
void keyDown(unsigned int key)
{
  switch(key)
  {
       case XK_W: //вперед
                      ....
                      break;
       case XK_S: //назад
                      ....
                      break;
       case XK_A: //влево
                      ....
                      break;
       case XK_D: //вправо
                      ....
                      break;
  }
}
 

1 проблема и 1 вопрос.
Проблема:
При нажатии клавиш приходит неправильный код. Либо код правильный, но интерпретируется неправильно, хз. В общем, должно обрабатываться WSAD, а вместо этого клавиша вперед - Пробел, клавиша назад - F2, клавиши вбок я так и не нашел. Ах да, клавиша 1 это Shift, клавиша 2 это ~, клавиша 5 это X. Подскажите пожалуйста, почему может неправильно интерпретироваться....
Вопрос:
функция mouseEvent осуществляет поворот камеры как в шутере. На деле - такое впечатление, что срабатывание ивента опаздывает, глючит, не выключается, фиг знает...XWarpPointer перестает срабатывать через некоторое время. Повороты идут в нужном направлении, но с каким-то опозданием, и иногда не выключаются даже если мышку остановил, камера все равно поворачивается...подскажите, пожалуйста, что это может быть Улыбающийся

Спасибо
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Март 11, 2013, 18:13 »

При нажатии клавиш приходит неправильный код. Либо код правильный, но интерпретируется неправильно, хз. В общем, должно обрабатываться WSAD, а вместо этого клавиша вперед - Пробел, клавиша назад - F2, клавиши вбок я так и не нашел. Ах да, клавиша 1 это Shift, клавиша 2 это ~, клавиша 5 это X. Подскажите пожалуйста, почему может неправильно интерпретироваться....

в event loop ты получаешь key code, его нужно превратить в key sym. То что у тебя в switch-case - именно key sym. Раньше было XKeycodeToKeysym, но это уже deprecated. Как по-новому я не знаю.
Записан
G-virus
Гость
« Ответ #2 : Март 11, 2013, 21:05 »

в event loop ты получаешь key code, его нужно превратить в key sym. То что у тебя в switch-case - именно key sym. Раньше было XKeycodeToKeysym, но это уже deprecated. Как по-новому я не знаю.

Да, действительно, что-то я упустил перевод в KeySym, теперь все работает как надо, спасибо! А про мышь не можете предположить?... Улыбающийся она в принципе работает, но такое впечатление что заедает ивент как-то...


кстати забыл добавить, что если расскоментировать обработку мыши, то клавиатуру уже не ловит... а камера вертится странно...в общем фиг знает Улыбающийся
« Последнее редактирование: Март 11, 2013, 21:15 от G-virus » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.074 секунд. Запросов: 22.