Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 处理sdl鼠标事件的正确方法是什么?_C++_Windows_Sdl - Fatal编程技术网

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

C++ 处理sdl鼠标事件的正确方法是什么?,c++,windows,sdl,C++,Windows,Sdl,这个问题在这里似乎很常见,我想我已经开始掌握该做什么了,但是这个问题是分开的,所以很难得到完整的答案。大多数答案似乎是临时性的,实施一个建议可能会以其他方式带来麻烦。我希望这个问题对于这个论坛来说足够狭窄 我想做的是找到一种正确处理鼠标事件的方法。我使用SDL2和c++。我想区分几个单独的行为:鼠标点击、双击、鼠标按下和鼠标移动。这就是问题所在。我已经编写了som代码,可以按照我想要的方式移动多边形(除了双击以外的每种情况),但是在继续之前,我需要有一种方法来注意我发生了什么类型的事件。到目前为

这个问题在这里似乎很常见,我想我已经开始掌握该做什么了,但是这个问题是分开的,所以很难得到完整的答案。大多数答案似乎是临时性的,实施一个建议可能会以其他方式带来麻烦。我希望这个问题对于这个论坛来说足够狭窄

我想做的是找到一种正确处理鼠标事件的方法。我使用
SDL2
c++
。我想区分几个单独的行为:鼠标点击、双击、鼠标按下和鼠标移动。这就是问题所在。我已经编写了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\u down
delta\u up
,可用于确定是否按下或单击鼠标(
delta\u down
),以及是否有双击(
delta\u up

独立的鼠标状态更新可能解决了移动问题,但我不能完全确定这是否正确

我还看到一些建议,可以识别单击或从某个距离移动,但在决定是否按下鼠标或单击鼠标时,似乎会出现一些问题


事先谢谢。

那么,你是想问如何检查双击,还是想让我们重写你的整个偶数序列?我猜本论坛不包括编写代码,因此如果问题太广,无法给出正确答案,或者代码太差,无法调整并使其正常工作,然后,也许有一个链接或指导原则如何运作就可以了。问题在于如何对不同类型的鼠标事件进行分类。我想你可以创建自己的枚举。类似这样:
enum{MouseUp,MouseDown,MouseDBLClick}那么这些增量时间将是您认为“可接受”的方式?至少对于一些相当简单的应用程序,我不认为我会遇到这么多麻烦。只需清楚地定义“单击”和“双击”。比如“在N毫秒内按下并释放,鼠标最多移动M个像素”。在那之后,您很可能知道如何实现它。