sf::Font::loadFromFile 程序崩溃
sf::Font::loadFromFile crashing the program
我最近一直在测试 SFML 2.3 中的一些功能,并且开始熟悉 C++。
玩玩之后,我决定尝试将文本添加到程序中,使用 sf::Text
和 sf::Font
.
这样做后,我在 运行 程序时遇到了问题,甚至使用它的教程也是如此。
我试过调试它,但没有发现任何问题,但是当 运行,关于它绘制的点 'text',出现一个对话框说 "text.exe has stopped working"
我是 运行 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;
}
您正在这样做:
font.loadFromFile("arial.ttf")
在没有延迟的循环中。字体应在程序启动时加载一次,否则 OS 并且您的防病毒软件将不喜欢您的程序正在执行的操作(重复访问磁盘上的同一文件时间过长)。
关于延迟,你应该有:
window.setVerticalSyncEnabled(true);
与 60FPS 同步(可能),因为您也达到了最大值 CPU thread/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;
}
我最近一直在测试 SFML 2.3 中的一些功能,并且开始熟悉 C++。
玩玩之后,我决定尝试将文本添加到程序中,使用 sf::Text
和 sf::Font
.
这样做后,我在 运行 程序时遇到了问题,甚至使用它的教程也是如此。
我试过调试它,但没有发现任何问题,但是当 运行,关于它绘制的点 'text',出现一个对话框说 "text.exe has stopped working"
我是 运行 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;
}
您正在这样做:
font.loadFromFile("arial.ttf")
在没有延迟的循环中。字体应在程序启动时加载一次,否则 OS 并且您的防病毒软件将不喜欢您的程序正在执行的操作(重复访问磁盘上的同一文件时间过长)。
关于延迟,你应该有:
window.setVerticalSyncEnabled(true);
与 60FPS 同步(可能),因为您也达到了最大值 CPU thread/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;
}