车轮运动的SDL事件序列

时间:2013-05-13 09:02:04

标签: c event-handling mouseevent sdl

我是SDL的新手,我正在维护一个SDL应用程序。我想知道当用户玩滚轮时传递了哪些(以及如何)事件。在我的应用程序中,用户使用鼠标滚轮修改屏幕上的小方块的大小。当用户转动方向盘时,我发现应用程序非常慢。

基本上有一个大循环

SDL_event event;
for(;;){
   //
   SDL_WaitEvent(&event);
   SDL_LockMutex(mymutex);

   switch(event.type){
     case SDL_CUSTOMEVENT: //handle 2 or 3 customs events
     break;
     case SDL_KEYDOWN: //handle keydown
     break;
     case SDL_VIDEOEXPOSE: //handle keydown
     break;

     case SDL_MOUSEBUTTONDOWN: 
         switch(event.button.button){
              case SDL_BUTTON_RIGHT: 
              break;
              case SDL_BUTTON_RIGHT:
              break;
              case SDL_BUTTON_WHEELUP: <----------------------
              /**
                 Recompute the size of the box. 
                 Also, you will not believe, update
                 the whole screen by redrawing the images each time.   
              **/
              break;
              case SDL_BUTTON_WHEELDOWN:
                 //same as above
              break;

         }
     break;
   }
   //etc....
   SDL_UnlockMutex(mymutex);
}

因此执行此循环的线程正在与另一个线程共享数据,并且因为两个线程都可以被抢占,所以轮子事件的消耗非常慢。

我想聚合轮事件的处理,例如通过

while(//there are wheel down or up){
  //change direction variables
  SDL_PeepEvents(//wheel events);
}
//update the screen

是否有直接方法通过SDL_PeepEvents捕获轮事件?我的意思是窥视鼠标事件(SDL_MOUSEBUTTONDOWN)的替代方法,然后测试按钮是否为滚轮。我在SDL 1.3 documentation中看到有SDL_MOUSEWHEEL事件类型。但另一方面。这是否适用于SDL 1.2(我正在使用的版本)。当用户使用滚轮时,是否会发送SDL_MOUSEWHEELSDL_MOUSEBUTTONDOWN

ps:我无法访问C ++

0 个答案:

没有答案