2017-02-12 107 views
0

我试图做一个var增加,当我按一个键, 但有一个问题。 正如我持有该密钥,它继续前进,增加我的号码(直到我释放密钥,当然)。 我不想为每次新闻都添加一个,即使当我拿着它时也是如此。sfml - 等到钥匙不再按下

这里是我的代码:

#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; 
} 

所有帮助表示赞赏。

+0

*编辑我试过使用while循环和for循环 –

回答

0

做一个变量,将举行,如果用户按下或释放的关键

bool onKeyHold = false; 

所以算法是:

  • 检测,如果他按下一个键。
  • 如果是这样,检查是否onKeyHold是假的(你不想增加,如果HES拿着钥匙)
  • 如果是这样,则增加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为假(用户不持有任何密钥),如果这是错误的,这意味着您只是按下了一个键,而您没有拿着它,因为如果您持有一个键,它将触发一个重要的新闻事件。所以如果您没有检查onKeyHold是否为false,则每次触发按键时都会增加Selected