什么是处理sdl鼠标事件的正确方法?

时间:2014-06-14 10:41:15

标签: c++ windows sdl

这个问题似乎在SO上非常普遍,我想我开始掌握应该做什么,但问题是全部分开,所以很难得到完整的答案。最多的答案似乎是临时的风格,实施一个建议可能会导致其他方式的麻烦。我希望这个问题对于这个论坛来说足够狭窄。

我想要做的是找到一种正确处理鼠标事件的方法。我使用SDL2c++。我想区分几个单独的行为:鼠标单击,双击,鼠标按下和鼠标移动。这确实是问题发生的地方。我已经编写了som代码,以我想要的方式移动多边形(除了双击之外的每个案例),但在我继续之前,我需要有办法注意我有什么样的事件。到目前为止编写的代码就是这样。

while( SDL_PollEvent( &e ) != 0 )
{
    if( e.type == SDL_QUIT ){ quit = true; }
    else if(e.type == SDL_MOUSEBUTTONDOWN){
    keep_moving = true;
    printf("Button is pressed\n");
    }
    else if(e.type == SDL_MOUSEBUTTONUP){
        keep_moving = false;
    printf("Button was released\n");
    }
}

if (keep_moving) { SDL_GetMouseState( &MOUSE_X, &MOUSE_Y ); }

这只会在按下或释放鼠标按钮时推送事件。当前的鼠标状态也会不断更新,除了按下按钮,我觉得这是最好的方式。这是因为鼠标位置不需要导致动作(移动由windows处理的图标除外)。

我的第一个猜测是,事件的决定必须取决于上述代码中的事件发生之间的时间。与定义两个变量delta_downdelta_up一样,可以用来决定是否按下或点击鼠标(delta_down)以及是否有双击(delta_up)。

运动可能已通过独立鼠标状态更新解决,但我不完全确定这是可以的。

我也看到了一些建议来确定点击或从某个距离移动delta_d,但在决定是否按下或点击鼠标时,这似乎可能是一些问题。

事先谢谢你。

0 个答案:

没有答案