1

我是 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 文档中看到有一个SDL_MOUSEWHEEL事件类型。但另一方面。这是否适用于 SDL 1.2(我正在使用的版本)。当用户使用轮子操作时,是否发送和都发送SDL_MOUSEWHEELSDL_MOUSEBUTTONDOWN

ps:我无法访问C++

4

0 回答 0