2015-12-25 33 views
1

我一直在測試SFML 2.3中的一些功能最近,我已經開始習慣C++了。 玩過之後,我決定嘗試將文本添加到程序中,其中sf::Textsf::Fontsf :: Font :: loadFromFile崩潰程序

一旦這樣做,我一直在運行程序時遇到問題,甚至使用它的教程。

我試圖調試它,但都沒有從看到任何問題,但在運行的時候,在哪裏它借鑑「文」,一個對話框出現,說:「text.exe已停止工作」

我正在運行Windows 10 10586,而我正在使用VS2012 Professional。

我有下面的代碼,我到目前爲止。在一個循環中沒有延遲

font.loadFromFile("arial.ttf") 

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

int main() 
{ 
    sf::RenderWindow window(sf::VideoMode(800,600),"Text Test"); 
    sf::Text text; 
    sf::Font font; 
    std::cout << "Created the Window." << std::endl; 
    std::cout << "Loaded Text and Font classes" << std::endl; 

    while (window.isOpen()) 
    { 
     sf::Event event; 
     std::cout << "Created window Function loop" << std::endl; 

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

     if (!font.loadFromFile("arial.ttf")) 
     { 
      std::cout << "Program Halted." << std::endl; 
      std::exit(-1); 
     } 

     std::cout << "Loaded Fonts." << std::endl; 
     text.setFont(font); 
     text.setString("I am a Test"); 
     text.setCharacterSize(20); 

     window.clear(); 
     window.draw(text); 
     window.display(); 
    } 
    return 0; 
} 
+1

這將是更好的移動加載該字體和初始化'SF :: Text'對象出主處理的代碼循環。這應該是每秒執行多次。 – Galik

+0

@Henry除了在你的標題中加入'(Solved)',你可以接受你最喜歡的答案。我們就是這樣做的。 – LogicStuff

+0

我聽說過這個,但是因爲我的答案基本相同,所以我不能說一個比另一個好。所以我寧願告訴人們它已經「解決」了,而不是獲得更多的答案,要麼使其變得更加複雜,要麼作爲重複的答案。 –

回答

1

你這樣做。字體應該在程序開始時加載一次,或者操作系統和防病毒軟件不會喜歡你的程序正在做什麼(反覆訪問磁盤上的相同文件太久)。

至於延遲,你應該有:

window.setVerticalSyncEnabled(true); 

與60FPS(可能)同步,因爲你杏CPU線程/ GPU了。

產生的代碼,與一些非描述性輸出消息中移除:

int main() 
{ 
    sf::RenderWindow window(sf::VideoMode(800,600),"Text Test"); 
    window.setVerticalSyncEnabled(true); 
    std::cout << "Created the Window." << std::endl; 

    sf::Text text; 
    sf::Font font; 

    if (!font.loadFromFile("arial.ttf")) 
    { 
     std::cout << "Program Halted." << std::endl; 
     std::exit(-1); 
    } 

    std::cout << "Loaded Fonts." << std::endl; 
    text.setFont(font); 
    text.setString("I am a Test"); 
    text.setCharacterSize(20); 

    while (window.isOpen()) 
    { 
     sf::Event event; 

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

     window.clear(); 
     window.draw(text); 
     window.display(); 
    } 

    return 0; 
} 
+0

謝謝,它現在都工作正常。我故意將非描述性內容放進去,因爲我真的對它爲什麼不起作用感到困惑,所以我決定'標記'大部分函數來發現錯誤。 –

+0

好吧,對我來說,檢查'text'和'font'是否已經被構建,這只是奇怪的。沒有什麼可以在那裏失敗。 – LogicStuff