2013-11-23 50 views
0

我對使用Xlib函數進行事件處理有一些理解問題。XEvent動畫處理

我的問題是 - 如何在動畫過程中按下某個鍵,而不會干擾動畫。

到目前爲止,我的設置是我在while循環中有一些動畫,並且想要實現一個修改參數的KeyPress事件。

它看起來是這樣的

而(1){

XNextEvent例行(DIS,&報告);
開關(report.type){
情況下按鍵:
如果(XLookupKeysym(& report.xkey,0)== XK_space){
//...modify參數..//
}}
//...Some動畫,其中一個參數是用來修改動畫... //
}

現在的問題是,我必須始終按鍵坐上我的動畫屏幕,否則不會顯示。我已經嘗試了一些多重代碼修改,使用KeyRelease等,但是我沒有clou,真的。

Trivially說 - 我需要在沒有XNextEvent進程的動畫期間掛鉤一個鍵,等待任何事件。但是在我的代碼中沒有XNextEvent語句,KeyPress事件檢查的條件語句不起作用。

我想正式這將意味着:

而(1){

如果(report.type ==按鍵){
如果(XLookupKeysym(& report.xkey,0) == XK_space){
//...modify參數..//
}}
//...Some動畫其中參數a被用於修改動畫... //
}

回答

1

使用XPending()檢查XEvents,然後用XNextEvent()獲取它們。然後

XPending()返回事件隊列中的事件的數量,以便修改您的循環:

while(1){ 
    if (XPending(dis) > 0) { 
     XNextEvent(dis, &report); 
     switch (report.type) { 
     case KeyPress: 
      if (XLookupKeysym(&report.xkey, 0) == XK_space){ 
       //...modify parameter a..// 
      } 
     } 
    } 
    //...Some animation where parameter a is used to modify animation...// 
    } 
+0

正是我腦子裏想的,每個按鍵一個事件。謝謝! –