Здравствуйте. Связался с 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 перестает срабатывать через некоторое время. Повороты идут в нужном направлении, но с каким-то опозданием, и иногда не выключаются даже если мышку остановил, камера все равно поворачивается...подскажите, пожалуйста, что это может быть
Спасибо