2014-02-23 33 views
0

我需要一些幫助,以在Visual C++ 2010 Express Edition中使用我的SFML/C++代碼。我試圖讓我的文字(livesLeft)爲「你贏了!」節目睡覺之前。這使得玩家知道他贏了。但相反,程序會正確地進入睡眠狀態,並在文本關閉時正確更改文本,因此您只能看到它在幾毫秒內發生更改。我甚至無法讀取它。SFML幫助(使用<Windows.h>中的睡眠功能)

bool play = true; 
    bool win = false; 
    bool touchFinish = false; 

    int lives = 3; 

    sf::Font arial; 
    if(arial.loadFromFile("Fonts/arial.ttf") == 0) 
    { 
      return 1; 
    } 

    sf::Text livesLeft; 
    livesLeft.setFont(arial); 
    livesLeft.setCharacterSize(30); 
    livesLeft.setString("Lives: "); 
    livesLeft.setPosition(0, 0); 
    livesLeft.setColor(sf::Color::White); 

    sf::RectangleShape finish; 
    finish.setSize(sf::Vector2f(200, 600)); 
    finish.setPosition(700, 0); 
    finish.setFillColor(sf::Color::Green); 

這些都是我在使用變量,這是我的代碼,我正在試圖改變文本:

if(player.getGlobalBounds().intersects(finish.getGlobalBounds())) 
    { 
     livesLeft.setString("You Win!"); 
     touchFinish = true; 
    } 

    if(touchFinish) 
    { 
     win = true; 
    } 

    if(win) 
    { 
     Sleep(5000); 
      play = false; 
    } 

我也忘了加在我有渲染末:

window.clear(); 
    window.draw(livesLeft); 
    window.draw(finish); 
    window.draw(player); 
    window.draw(obs1); 
    window.draw(obs2); 
    window.draw(obs3); 
    window.draw(obs4); 
    window.draw(obs5); 
    window.draw(obs6); 
    window.draw(obs7); 
    window.draw(obs8); 
    window.draw(obs9); 
    window.draw(obs10); 
    window.draw(obs11); 
    window.draw(obs12); 
    window.draw(obs13); 
    window.display(); 
+0

因爲您需要更新屏幕,所以您設置了字符串,但是您沒有用新字符串更新屏幕。數據在那裏,但你做了一個睡眠,並沒有渲染它。 – Lefsler

+0

對不起,我是個小白點,你怎麼做到這一點,demonofnight? –

回答

3

這很可能是由於您沒有爲您調用顯示方法窗口。告訴要更改的文本只需準備下一個幀緩衝區以顯示新文本,但由於您從不告訴窗口在睡眠之前更新其顯示,因此它不會顯示新的幀緩衝區。

Here是使用SFML的簡單程序的一個簡單示例。注意主遊戲循環結尾處的window.display()方法。

你有效地想要做的:

if(win) 
{ 
    window.display(); 
    Sleep(5000); 
    play = false; 
} 

爲什麼你需要更新顯示之前之所以再度出手是因爲睡眠(5000);阻塞線程,基本上意味着它在5000ms處呼叫。另外,如果你想在屏幕上保留以前的項目,你需要在window.display()之前重繪這些項目。同樣,因爲這些不會在下一個幀緩衝區中。

+0

我已經使用過了:window.clear(); \t \t window.draw(livesLeft); \t \t window.draw(finish); \t \t window.draw(player); \t \t window.draw(obs1); \t \t window.draw(obs2); \t \t window.draw(obs3); \t \t window.draw(obs4); \t \t window.draw(obs5); \t \t window.draw(obs6); \t \t window.draw(obs7); \t \t window.draw(obs8); \t \t window.draw(obs9); \t \t window.draw(obs10); \t \t window.draw(obs11); \t \t window.draw(obs12); \t \t window.draw(obs13); \t \t window.display(); –

+0

你需要在睡眠方法之前特別放置它。睡眠是一個阻塞的呼叫,這意味着它不會超過這一點,永遠不會呈現。你的方法應該看起來像這樣: if(win) window.display(); 睡眠(5000); play = false; } 查看我的更新以獲得更好的格式。 – GEMISIS

+0

非常感謝! –