我有一個小問題,抓住關鍵事件公佈,從走在我的遊戲停止我的性格..KeyRelease事件不會發送
我試圖做到這一點:
switch (xev.type)
{
case Expose:
{
XGetWindowAttributes(dpy, win, &gwa);
glViewport(0, 0, gwa.width, gwa.height);
}
break;
case KeyPress:
{
int key = XLookupKeysym(&xev.xkey, 0);
if (key == XK_Escape)
{
glXMakeCurrent(dpy, None, NULL);
glXDestroyContext(dpy, glc);
XDestroyWindow(dpy, win);
XCloseDisplay(dpy);
running = false;
return 0;
}
else
{
input->setKey(key, true);
}
}
break;
case KeyRelease:
{
unsigned short is_retriggered = 0;
if (XEventsQueued(dpy, QueuedAfterReading))
{
XEvent nev;
XPeekEvent(dpy, &nev);
if (nev.type == KeyPress && nev.xkey.time
== xev.xkey.time && nev.xkey.keycode
== xev.xkey.keycode)
{
// delete retriggered KeyPress event
XNextEvent(dpy, &xev);
is_retriggered = 1;
}
}
if (!is_retriggered)
input->setKey(XLookupKeysym(&xev.xkey, 0), false);
}
break;
}
但我只得到重新觸發的重要發佈事件,這是我不想要的。 (即使發佈/重新發佈會有相同的結果,但將來可能會出現問題) 當我物理釋放密鑰時,沒有事件被捕獲。
哦,和輸入 - > setkey的()基本設置在一個std一個布爾爲true(或false)::地圖,沒有什麼特別的
您是否在應用程序中正確註冊了所需的事件(如果您使用的是XI2,則爲「XISelectEvents」)? – j4x 2011-03-11 20:41:47
修復它,謝謝:) – Brammie 2011-03-11 22:53:38