首先,是的,我知道这个问题,但我正在寻找更多的信息.实际上,我有一个相当类似的问题,因为我需要能够捕获鼠标/键盘/操纵杆的输入,而且我还想尽可能避免使用SDL.我或多或少想知道是否有人知道在哪里可以获得一些关于处理来自Linux设备的输入的一些不错的引物,甚至可能是一些教程.SDL非常适合跨平台输入处理,但我不会在SDL中使用任何其他东西,所以我想完全删除它.建议,意见和帮助都表示赞赏.谢谢!
为清晰起见编辑:
重点是捕捉鼠标运动,键盘按下/释放,鼠标点击以及游戏的潜在操纵杆处理.
使用下面的链接查看函数void kGUISystemX :: Loop(void)
这是我在Linux上使用X Windows通过键盘和鼠标获取输入的主要循环.
http://code.google.com/p/kgui/source/browse/trunk/kguilinux.cpp
这是一个片段:
if(XPending(m_display))
{
XNextEvent(m_display, &m_e);
switch(m_e.type)
{
case MotionNotify:
m_mousex=m_e.xmotion.x;
m_mousey=m_e.xmotion.y;
break;
case ButtonPress:
switch(m_e.xbutton.button)
{
case Button1:
m_mouseleft=true;
break;
case Button3:
m_mouseright=true;
break;
case Button4:/* middle mouse wheel moved */
m_mousewheel=1;
break;
case Button5:/* middle mouse wheel moved */
m_mousewheel=-1;
break;
}
break;
case ButtonRelease:
switch(m_e.xbutton.button)
{
case Button1:
m_mouseleft=false;
break;
case Button3:
m_mouseright=false;
break;
}
break;
case KeyPress:
{
XKeyEvent *ke;
int ks;
int key;
ke=&m_e.xkey;
kGUI::SetKeyShift((ke->state&ShiftMask)!=0);
kGUI::SetKeyControl((ke->state&ControlMask)!=0);
ks=XLookupKeysym(ke,(ke->state&ShiftMask)?1:0);
......
Run Code Online (Sandbox Code Playgroud)