Animation 动画中的XEvent处理

Animation 动画中的XEvent处理,animation,gcc,event-handling,keypress,xlib,Animation,Gcc,Event Handling,Keypress,Xlib,我对Xlib函数的事件处理有一些理解上的问题 我的问题是-如何在动画中按下一个键,而不干扰动画 到目前为止,我的设置是在while循环中有一些动画,并希望实现修改参数的按键事件 看起来像这样 而(1){ XNextEvent(显示和报告); 开关(报表类型){ 外壳按键: if(XLookupKeysym(&report.xkey,0)=XK_空间){ //…修改参数a../} //…某些动画,其中参数a用于修改动画…//} 现在的问题是,我必须一直按这个键才能在屏幕上显示动画,否则什么都不会出

我对Xlib函数的事件处理有一些理解上的问题

我的问题是-如何在动画中按下一个键,而不干扰动画

到目前为止,我的设置是在while循环中有一些动画,并希望实现修改参数的按键事件

看起来像这样

而(1){

XNextEvent(显示和报告);
开关(报表类型){
外壳按键:
if(XLookupKeysym(&report.xkey,0)=XK_空间){
//…修改参数a../
}
//…某些动画,其中参数a用于修改动画…//
}

现在的问题是,我必须一直按这个键才能在屏幕上显示动画,否则什么都不会出现。我尝试过多次代码修改,包括keyrease等,但我真的没有clou

琐碎地说-我需要在动画期间钩住一个关键点,而不需要XNextEvent进程,等待任何事件。但是,如果代码中没有XNextEvent语句,KeyPress事件检查的条件语句就无法工作

我想这在形式上意味着:

而(1){

如果(report.type==KeyPress){
if(XLookupKeysym(&report.xkey,0)=XK_空间){
//…修改参数a../
}
//…某些动画,其中参数a用于修改动画…//
}

在使用
XNextEvent()
获取XEvent之前,请使用
XPending()
检查XEvent

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...//
   }

正是我想的,每个按键一个事件。非常感谢。