Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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++ 如何在SFML 2.5.1中注册鼠标单击_C++_Visual Studio_Sfml - Fatal编程技术网

C++ 如何在SFML 2.5.1中注册鼠标单击

C++ 如何在SFML 2.5.1中注册鼠标单击,c++,visual-studio,sfml,C++,Visual Studio,Sfml,所以,我的游戏循环中有一段代码,它执行每一帧: if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left) == true) { switch (j) {...} } 按照此代码的设置方式,只要按住鼠标左键,条件中的开关盒就会执行每一帧,这给我带来了一些问题 相反,我想要的是开关盒在一次单击后执行,这意味着在按下鼠标按钮然后释放之后,sf::mouse::isButton

所以,我的游戏循环中有一段代码,它执行每一帧:

   if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left) == true) {
                
            switch (j) {...}

   }
按照此代码的设置方式,只要按住鼠标左键,条件中的开关盒就会执行每一帧,这给我带来了一些问题

相反,我想要的是开关盒在一次单击后执行,这意味着在按下鼠标按钮然后释放之后,sf::mouse::isButtonPressed似乎非常适合这项工作,如果不是因为某些奇怪的原因,它在当前版本的SFML 2.5.1中不再是一件事情的话。这就是为什么在这个功能被移除之前,这个问题的任何可能的重复都不再可行

所以我尝试的是:

        if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left) == true) {
            if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left) == false) {

                switch (j) {...}

            }
        }
认为程序将首先检查按钮是否按下,然后不再按下,并且仅在两个条件分别满足时才执行开关情况,但这不起作用,现在开关情况完全停止执行


那么,如何让程序在每次鼠标点击一次后,在按下按钮然后释放后执行指令呢?

如果这对代码没有太大影响,请在轮询事件的地方使用sf::Event::MouseButtonReleased。这样,鼠标事件代码将只运行一次

另一个解决方案可能是禁用窗口的键重复,类似于window.setKeyRepeatedFalse。我不是100%确定你会如何处理这个问题


第三种解决方案是使用布尔值来跟踪鼠标按钮的状态。

如果这对代码没有太大影响,请在轮询事件的地方使用sf::Event::MouseButtonReleased。这样,鼠标事件代码将只运行一次

另一个解决方案可能是禁用窗口的键重复,类似于window.setKeyRepeatedFalse。我不是100%确定你会如何处理这个问题


第三种解决方案是使用布尔值来跟踪鼠标按钮的状态。

好的,对于第一种解决方案,它进行了一些调整,但确实有效,因此从技术上讲,您确实回答了我的问题,但由于某种原因,同样的问题仍然存在,现在,在我释放鼠标按钮后的一瞬间,在这段时间内,switch case仍然会在几帧内执行,这导致了我正试图解决的问题。然后我改变了我所做的更改,尝试了第二个解决方案,它根本不起作用,剩下第三个解决方案,我很确定“isButtonPressed”函数已经返回我的鼠标按钮状态,所以这不是什么新的。好吧,对于第一个解决方案,它进行了一些调整,但确实起作用,从技术上讲,你确实回答了我的问题,但由于某种原因,同样的问题仍然存在,现在,在我释放鼠标按钮后的一小部分时间里,开关盒仍然在那一小部分时间内执行,这导致了我正试图解决的问题。然后我改变了我所做的更改,尝试了第二种解决方案,它根本不起作用,这就剩下第三种解决方案了,我很确定“isButtonPressed”函数已经返回了我的鼠标按钮状态,所以这不是什么新鲜事。