我一直在测试SFML 2.3中的一些功能。最近,我开始熟悉C ++。
在玩完之后,我决定尝试使用sf::Text
和sf::Font
将文字添加到程序中。
这样做,我在运行程序时遇到了问题,甚至使用了教程。
我已经尝试过调试它,但没有看到任何问题,但是在运行时,关于它绘制文本的位置,会出现一个对话框,说出" text.exe已停止工作"
我正在运行Windows 10 10586,而且我正在使用VS2012 Professional。
我的代码如下,到目前为止。
#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;
}
答案 0 :(得分:1)
你这样做:
font.loadFromFile("arial.ttf")
在没有延迟的循环中。该字体应该在程序开始时加载一次,否则操作系统和您的防病毒软件将不喜欢您的程序正在执行的操作(反复访问磁盘上的同一文件太长时间)。
关于延迟,你应该:
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;
}