- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我之前提出了一个关于鼠标输入的问题,这帮助我理解了鼠标事件的开始。我创建了一个处理各种输入的类,我只想说有一些我尝试用 bool 值纠正但无济于事的错误。
即使鼠标滚轮或鼠标没有滚动或移动,鼠标滚轮和 mousemotion 事件也会连续执行。
我用这个简单的调用测试鼠标滚动:
bool isMouseWheelScrolled() const
{
return pMouseWheelScrolled;
}
然后我使用 switch 语句监听鼠标事件:
while(SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_MOUSEMOTION:
onMouseMove(event);
break;
case SDL_MOUSEWHEEL:
onMouseWheelScroll(event);
break;
default:
break;
}
}
void onMouseWheelScroll(SDL_Event &event)
{
switch(event.wheel.type)
{
case SDL_MOUSEWHEEL:
pMouseWheelScrolled = true;
pMouseWheel.x = event.wheel.x;
pMouseWheel.y = event.wheel.y;
break;
default:
break;
}
}
同样的事情也适用于鼠标移动,但是:
void onMouseMove(SDL_Event &event)
{
pMouseMoved = true;
pMousePosition.x = event.motion.x;
pMousePosition.y = event.motion.y;
}
bool 值确实有问题;将它们设置为 true 的条件已经过测试,但我不知道如何分析这些 bool 值变为 false 的条件。我的解决方案是专注于监听鼠标状态,但我不知道该怎么做,教程也不足以解释它们。文档也不是那么直观。我需要 bool 值的原因是我可以测试鼠标是否已经移动或滚动到类之外。我已经可以测试按键和鼠标按键;但是鼠标滚轮和鼠标移动是另一个问题;主要是因为我需要获得
event.motion.x;
event.motion.y;
event.wheel.x;
event.wheel.y;
我的相机。而且我不准备将相机传到我的类(class),因为这会破坏 OO。
tldr; mouse wheel 和 mouse moved 设置为 true,但是当鼠标滚轮不滚动或鼠标不移动时如何禁用它们?
最佳答案
我认为您误解了鼠标事件的工作原理。当鼠标移动时,您不会收到 SDL_MOUSEMOTION
事件。相反,当鼠标移动时,您会收到一个 SDL_MOUSEMOTION
事件。也就是说,该事件代表一个时间点。
如果你想在鼠标移动时做某事,最好的选择是直接响应鼠标事件。如果这违背了您的 OO 设计,那么您的设计就是错误的。
如果您坚持使用 bool 值,那么您应该在您的消费者类将其视为true
时立即将 bool 变量设置为false
,以便处理每个事件只有一次。
无论如何,我的建议是使用某种接口(interface),比如这个:
class IMouseListener
{
virtual OnMouseMove(int x, int y) =0;
virtual OnMouseWheel(int x, int y) =0;
};
然后让你的主类实现这个接口(interface),让你的鼠标处理代码接收到一个指向这个接口(interface)的指针。
关于c++ - SDL 鼠标滚轮和 mousemotion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583696/
我相信绝大多数小伙伴在自学python时,运用pycharm进行编写程序时发现字体太小不方便进行编写,通常像codeblocks这样的编程软件可以通过“ctrl+滚轮”进行放大和缩小。而
在我的应用程序中,我使用了 Scroller零件。我似乎无法弄清楚我应该在哪个事件上设置一个监听器以便知道何时滚动内容。我试过Event.CHANGE在 Scroller.verticalScroll
我正在使用一个简单的 progressDialog,它运行正常但轮子没有进步: //Progress Dialog final ProgressDialog dialo
我想在点击文本字段时关闭键盘,以便为该文本字段下方的选择器留出空间。 struct ContentView: View { @State private var date = Date()
我是一名优秀的程序员,十分优秀!