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个像素”。在那之后,您很可能知道如何实现它。