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