2011-03-11 2 views
0

내 게임 걷는에서 내 캐릭터를 중지하려면 키 해제 이벤트를 잡기 약간의 문제가있어 ..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이 문제를 해결 등록

+0

응용 프로그램에 필요한 이벤트를 올바르게 등록 했습니까? (XI2를 사용하는 경우 'XISelectEvents')? – j4x

+0

그걸 고쳤어, 고마워. :) – Brammie

답변

1

특별한 아무것도를 설정() 입력 -.

XSelectInput(dis, win, KeyPressMask | KeyReleaseMask);

관련 문제