2015-04-20 154 views
1

我試圖通過使用SFML(只是一個測試運行)得到一張圖片來顯示。該程序可以找到圖片,並打開一個新窗口,但是當它打開窗口時,它只會彈出半秒鐘,然後返回1.這裏是代碼(這只是他們的例子,我調整過):SFML window.draw();只顯示一小段時間

#include <SFML/Graphics.hpp> 

int main() 
{ 
    sf::RenderWindow window(sf::VideoMode(500, 500), "SFML works!"); 

    sf::Texture Texture; 
    sf::Sprite Sprite; 
    if(!Texture.loadFromFile("resources/pepe.png")); 
     return 1; 

    Sprite.setTexture(Texture); 

    while (window.isOpen()) 
    { 
     sf::Event event; 
     while (window.pollEvent(event)) 
     { 
      if (event.type == sf::Event::Closed) 
       window.close(); 
     } 
     window.clear(); 
     window.draw(Sprite); 
     window.display(); 
    } 

    return 0; 
} 

我假設錯誤來自加載後的return 1;,但我沒看到有什麼問題。有人可以發佈一些對他們有用的東西,或給我提示可能會出錯的提示嗎?

+1

你是從正確的文件夾中運行它來找到這個文件:'「resources/pepe.png」'? – Galik

回答

3

你的代碼工作得很好,除了從文件加載紋理之後的;,使你的程序總是返回1,無論發生什麼。

這是一個好主意,添加錯誤消息,以瞭解發生了什麼問題。

#include <SFML/Graphics.hpp> 

#include <iostream> 
int main() 
{ 
    sf::RenderWindow window(sf::VideoMode(500, 500), "SFML works!"); 

    sf::Texture Texture; 
    sf::Sprite Sprite; 
    if(!Texture.loadFromFile("resources/pepe.png")){ // there was a ; here. 
     // making the code below always run. 
     std::cerr << "Error loading my texture" << std::endl; 
     return 1; 
    } 

    Sprite.setTexture(Texture); 

    while (window.isOpen()) 
    { 
     sf::Event event; 
     while (window.pollEvent(event)) 
     { 
      if (event.type == sf::Event::Closed){ 
       window.close(); 
      } 

      // you only get here when there is at least one event. 
     } 

     // but you always want to display to the screen. 
     window.clear(); 
     window.draw(Sprite); 
     window.display(); 

    } 

    return 0; 
} 

我的經驗法則是始終將代碼塊用花括號,所以你永遠不會讓這些那樣的失誤(或其他人改變你的代碼是不太容易犯這種錯誤)。