내 게임 걷는에서 내 캐릭터를 중지하려면 키 해제 이벤트를 잡기 약간의 문제가있어 ..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 기본적으로 성병에 사실 (또는 false)에 부울 ::지도의 KeyReleaseMask이 문제를 해결 등록
응용 프로그램에 필요한 이벤트를 올바르게 등록 했습니까? (XI2를 사용하는 경우 'XISelectEvents')? – j4x
그걸 고쳤어, 고마워. :) – Brammie