等待,直到不再按键
wait until key no longer pressed
当我按下一个键时,我试图增加var,但有一个问题。当我拿着钥匙时,它一直在继续,增加了我的数字(当然,直到我松开钥匙)。我不希望每次按下都只加一个,即使我按住它。
这是我的代码:
#include <SFML/Graphics.hpp>
#include <string>
#include <unistd.h>
#include <iostream>
using namespace std;
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "-\\-(Game)-//-");
sf::Style::Resize;
int Selected = 1;
std::string s = std::to_string(Selected);
window.setSize(sf::Vector2u(800, 600));
sf::Font font;
font.loadFromFile("DIMITRI_.TTF");
sf::Event event;
sf::Text Bplay("Play", font);
Bplay.setCharacterSize(60);
Bplay.setStyle(sf::Text::Underlined);
Bplay.setPosition(50, 300);
sf::Text Boption("Settings", font);
Boption.setCharacterSize(60);
Boption.setPosition(50, 400);
sf::Text Ttitle1(s, font);
Ttitle1.setCharacterSize(150);
Ttitle1.setPosition(250, 50);
sf::Text Ttitle2("Vault", font);
Ttitle2.setCharacterSize(160);
Ttitle2.setPosition(250, 200);
while (window.isOpen())
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
Selected++;
std::string s = std::to_string(Selected);
Ttitle1.setString(s);
}
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear(sf::Color::Black);
window.draw(Bplay);
window.draw(Boption);
window.draw(Ttitle1);
window.draw(Ttitle2);
window.display();
}
return 0;
}
感谢所有的帮助。
创建一个变量,如果用户按下或释放键,该变量将保持不变
bool onKeyHold = false;
所以算法是:
- 检测他是否按下了某个键
- 如果是,请检查
onKeyHold
是否为false(如果他持有密钥,则不希望递增) 如果是,则递增
Selected
,然后使onKeyHold
成为真正的检测他是否释放了钥匙。如果是,则使
onKeyHold
为假。
如果你把它们放在代码中,它将是:
bool onKeyHold = false; //create a variable that will hold if user press or release a key
while (window.pollEvent(event))
{
if ( event.type == sf::Event::KeyPressed ) check if user pressed a key
{ //if so
if ( !onKeyHold ) // check if onKeyHold is false
{ //if so
Selected++; // increment
}
onKeyHold = true; // make onKeyHold true
}
else if ( event.type == sf::Event::KeyReleased ) // check if user released a key
{ // if so
onKeyHold = false; // make onKeyHold false
}
}
编辑:
不要忘记检查密钥是否为sf::Keyboard::Up
,否则这将适用于SFML中的每个可用密钥。
逻辑为:
只有当用户按下你想要的键时,你才会增加。如果用户按下了您检查过的某个键,如果onKeyHold
为false(用户没有持有任何键),如果为false,则意味着您只按下了一个键,而您没有持有它,因为如果您持有某个键将触发按键事件。因此,如果你没有检查onKeyHold
是否为false,那么每次你触发按键时,Selected
都会增加。
相关文章:
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 如何让LLDB在成功时退出,在失败时等待
- 等待整个 omp 块完成,然后再调用第二个函数
- 提升 ASIO - io_service 不要等待连接到线程
- 如何在C++中实现带有packaged_task的异步等待循环?
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- 如何等待窗口隐藏在Qt中?
- 更新后的Android Studio现在需要Clang,不再链接到GCC的库
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- 如何在不等待检索的情况下获取C++中的内存位置?
- 等待被迷住了,没有回来
- 等待 WaitForMultipleObjects 窗口中的事件数量可变
- 编译器现在遵循C++14标准,我的项目不再编译神秘的SFML错误
- 一个线程等待多个线程事件
- 等待 qthread 终止的正确方法是什么?
- 不可预测的C++睡眠/等待行为
- Bison/flex 在识别规则后等待输入
- 使用记事本C++打开 txt 文件时无需等待
- 不再支持Android NDK APP_STL gnustl_shared
- 等待,直到不再按键