SFML 窗口没有响应

Ave*_*mer 3 c++ sfml

我是一名初级 C++ 程序员,我正在制作一个蛇游戏,并且我正在尝试使用 SFML 库。我想制作我的 Snake 控制台应用程序,但我想将分数显示到 SFML 窗口。不仅如此,即使我整晚都在寻找解决方案,我也不知道如何将分数显示到窗口。另外,我的 SFML 窗口一直没有响应。

\n\n

我用以下代码渲染了窗口:

\n\n
sf::RenderWindow window(sf::VideoMode(200, 75), "Score");\n\n\nsf::Font font;\nif (!font.loadFromFile("font.tff"))\n    cout << "ERROR LOADING FONT" << endl;\nsf::Text text;\ntext.setFont(font);\ntext.setString("hello");\n//  sf::String scoredis;\n\nwhile (window.isOpen()) {\n\n    sf::Event event;\n    while (window.pollEvent(event))\n    {\n        if (event.type == sf::Event::Closed)\n            window.close();\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我尝试在游戏循环内显示分数:

\n\n
do{ \n    ...\n    window.clear();\n    window.draw(text);\n    window.display();\n    ...\n}while()\n
Run Code Online (Sandbox Code Playgroud)\n\n

main() 内的完整代码:

\n\n
{\nShowConsoleCursor(false);//nastavimo da ne kaze kurzorja\n                         //Nalozimo zvok ki ga bomo predvajali ko pojemo sadez\n\nsf::SoundBuffer buffer;\nif (!buffer.loadFromFile("sound.wav"))//v buffer vstavimo zvok\n{\n    cout << "ERROR LOADING SOUND" << endl;//ce je kaksna napaka se prikaze to\n}\nsf::Sound sound;\nsound.setBuffer(buffer);//nastavimo nas zvok na to kaj je v bufferju\n\n/*sf::Font font;\nif (!font.loadFromFile("font.tff"))\n    cout << "ERROR LOADING FONT" << endl;\nsf::Text text;\ntext.setFont(font);\ntext.setString("hello");\n//  sf::String scoredis;*/\n\nsf::RenderWindow window(sf::VideoMode(200, 75), "Score");\n\n\n\nwhile (window.isOpen()) {\n\n    sf::Event event;\n    while (window.pollEvent(event))\n    {\n        if (event.type == sf::Event::Closed)\n            window.close();\n    }\n}\n\n    int score = 0;\n    int weight = 0;\n    srand(time(0));\n    narisi(); //draw map\n    setup();\n\n    thread NitZaVnos(spremembaSmeri);   //ustvari in za\xc5\xbeene se nova nit, ki opravlja delo funkcije spremembaSmeri\n\n    do\n    {\n        if (weight>50)\n        {\n            changed = false;\n            premik(preberiSmer());\n            weight = 0;\n        }\n        if (fruitPickup())//Funkcija ki pogleda ce je glava kace na sadezu\n        {\n            genFruit();//generira novi sadez\n            score += 10;//dodamo tocke\n            sSize++;//povecamo velikost kace\n            sound.play();//predvajamo zvok\n        }\n\n        weight++;\n        if (zalet())// Pogledamo ce se glava zaleti v telo ce vrne funkcija true skocimo izben zanke\n            break;\n        //stringstream ss;\n        //  ss << score;\n        //scoredis.SetText(ss.str().c_str());\n\n        window.clear();\n        //window.draw(text);\n        window.display();\n\n        Sleep(5); //program pocaka 5 ms\n\n    } while (!gameOver());\n\n\n\n    gotoxy(0, visinaM + 1);\n    run = false;    //nastavi se vrednost spremenljivke run na false, da se lahko stranska nit zakljuci\n    NitZaVnos.join();   //stranska nit ze sedaj sinhronizira z glavnim programom\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

N00*_*dge 5

SFML 窗口无响应与您不再轮询事件有关。确保您的事件循环在主循环中未受影响,并且在游戏运行时它仍然运行。如果您发布完整的代码将会有所帮助。