我是 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_MOUSEWHEEL
?SDL_MOUSEBUTTONDOWN
ps:我无法访问C++