2013-06-22 41 views
0

所以我已經下載了SFML,並且至今都很喜歡它。我遇到了一個障礙,想​​弄清楚如何在下面的代碼中實現一個閃爍的光標。我還需要弄清楚如何在窗口上打印單個字符(當用戶按下鍵盤上的某個鍵時)。下面是一些代碼,我曾經使用過,因爲我已經下載了SFML 2.0:SFML - 創建光標和打印輸入?

#include <SFML/Graphics.hpp> 
#include <SFML/System.hpp> 
#include <SFML/Window.hpp> 
#include <iostream> 

int main() { 
    sf::RenderWindow wnd(sf::VideoMode(650, 300), "SFML Console"); 
    sf::Vector2u myVector(650, 300); 
    wnd.setSize(myVector); 

    sf::Font myFont; 
    myFont.loadFromFile("theFont.ttf"); 

    sf::Color myClr; 
    myClr.r = 0; 
    myClr.g = 203; 
    myClr.b = 0; 

    sf::String myStr = "Hello world!"; 
    std::char myCursor = '_'; 

    sf::Text myTxt; 
    myTxt.setColor(myClr); 
    myTxt.setString(myStr); 
    myTxt.setFont(myFont); 
    myTxt.setCharacterSize(12); 
    myTxt.setStyle(sf::Text::Regular); 
    myTxt.setPosition(0, 0); 

    std::int myCounter = 0; 

    while(wnd.isOpen()) { 
     sf::Event myEvent; 

     while (wnd.pollEvent(myEvent)) { 
      if (myEvent.type == sf::Event::Closed) { 
       wnd.close(); 
      } 

      if (myEvent.type == sf::Event::KeyPressed) { 
       if (myEvent.key.code == sf::Keyboard::Escape) { 
        wnd.close(); 
       } 
      } 

      wnd.clear(); 
      wnd.draw(myTxt); 

      myCounter++; 
      std::if (myCounter >= 1000) { 
       myCounter = 0; 
      } 

      std::if (myCounter < 1000) { 
       myTxt.setString("Hello world!_"); 
      } 

      wnd.display(); 
     } 
    } 
} 

回答

2

使用sf::Clockdoc)。

在您的主循環之前聲明您的時鐘以及您的其他變量,這也會自動啓動時鐘。在你的循環中,檢查時間已經過去,如果超出你想要的時間,重置時鐘。例如:

sf::Clock myClock; // starts the clock 
bool showCursor = false; 

// ... 

wnd.draw(myTxt); 

if(clock.getElapsedTime() >= sf::milliseconds(500)) 
{ 
    clock.restart(); 
    showCursor = !showCursor; 
    if(showCursor) 
     myTxt.setString("Hello World!_"); 
    else 
     myTxt.setString("Hello World!"); 
} 

// ... 

這應該會給你一個閃爍0.5秒的光標。

順便說一句,你爲什麼使用std::if()而不是簡單的if包含在該語言中?

+0

謝謝。我想我現在明白了。哦,std :: if是一個簡單的錯誤,我已經用普通的if代替了它。 – hCon

+0

呃,我剛剛用你的例子測試了我的代碼,顯然我需要讓鼠標不斷移動到SFML屏幕上,讓光標閃爍。有沒有辦法讓光標閃爍,而我不得不以常量方式移動鼠標以使光標閃爍?這是來源:http://pastebin.com/VjBNgpPC – hCon

+0

@Mike關閉你的'while(wnd.pollEvent(myEvent)){'是錯誤的。它應該在您測試事件後立即關閉(即pastebin中的第45行)。現在,只有當窗口有事件時纔會運行代碼,這就是爲什麼您需要移動鼠標。另一件事,你應該在'if'裏面放置'if(showCursor)/ else'來測試已用時間:當時間超過500ms時,你只需要改變文本一次,而不是在每一幀。 –