无法使用 SFML 显示我的 FPS 编号
Can't get my FPS number to show with SFML
- 我正在制作一个需要在屏幕左上角列出我的 FPS 计数器的程序。我正在使用 SFML 将我的程序输出到 window.
- 我有一个 FPS.cpp 文件,其中包含我的 FPS 计数器的 class。这个class里面有两个方法,“getFPS()”和“update()”。
fps.cpp
#include <SFML/Graphics.hpp>
#include <iostream>
class FPS
{
public:
FPS() : mFrame(0), mFps(0) {}
const unsigned int getFPS() const { return mFps; }
private:
unsigned int mFrame;
unsigned int mFps;
sf::Clock mClock;
public:
void update()
{
if (mClock.getElapsedTime().asSeconds() >= 1.f)
{
mFps = mFrame;
mFrame = 0;
mClock.restart();
}
++mFrame;
}
};
Game.cpp(仅限 SFML 初始化和游戏循环)
int Game::run()
{
//Prepare the Window
window.create(VideoMode(1920, 1080), "GameWindow", Style::Fullscreen);
FPS fps;
Text fpsNum;
sf::Font font;
font.loadFromFile("fonts/KOMIKAP_");
fpsNum.setFont(font);
fpsNum.setCharacterSize(75);
fpsNum.setFillColor(Color::Green);
fpsNum.setPosition(20, 20);
while (window.isOpen())
{
Event event;
while (window.pollEvent(event))
{
if (Keyboard::isKeyPressed(Keyboard::Escape))
{
window.close();
}
}
//Update
fps.update();
std::cout << fps.getFPS() << std::endl;
std::ostringstream ss;
ss << fps.getFPS();
fpsNum.setString(ss.str());
//Draw
window.clear();
window.draw(fpsNum);
window.display();
}
return 0;
}
- 当我 运行
std::cout << fps.getFPS() << std::endl;
控制台中显示正确的 FPS 时,我知道 getFPS() 正在执行它的工作。据我了解,问题出在 SFML 如何显示实际文本的某个地方,因为我在屏幕上看到的只是 FPS 应该显示的绿点。
图片:
Picture of the output, note the green dot at the top left corner.
注意:我知道这里没有显示主要功能,我没有理由显示这段代码,因为它与问题无关。
编辑:我还尝试在 fpsNum.setString("hello");
中显示静态“Hello”,但它也没有显示。
您是否尝试过只输入纯文本而不是 fps 计数?您可以尝试检查另一种字体是否可以工作,或者如果文件未加载则抛出错误。
if (!font.loadFromFile("fonts/KOMIKAP_")) {
std::cout << "Error with the file" << std::endl;
}
如果出现错误,请尝试将 .ttf 添加到字体中?
- 我正在制作一个需要在屏幕左上角列出我的 FPS 计数器的程序。我正在使用 SFML 将我的程序输出到 window.
- 我有一个 FPS.cpp 文件,其中包含我的 FPS 计数器的 class。这个class里面有两个方法,“getFPS()”和“update()”。
fps.cpp
#include <SFML/Graphics.hpp>
#include <iostream>
class FPS
{
public:
FPS() : mFrame(0), mFps(0) {}
const unsigned int getFPS() const { return mFps; }
private:
unsigned int mFrame;
unsigned int mFps;
sf::Clock mClock;
public:
void update()
{
if (mClock.getElapsedTime().asSeconds() >= 1.f)
{
mFps = mFrame;
mFrame = 0;
mClock.restart();
}
++mFrame;
}
};
Game.cpp(仅限 SFML 初始化和游戏循环)
int Game::run()
{
//Prepare the Window
window.create(VideoMode(1920, 1080), "GameWindow", Style::Fullscreen);
FPS fps;
Text fpsNum;
sf::Font font;
font.loadFromFile("fonts/KOMIKAP_");
fpsNum.setFont(font);
fpsNum.setCharacterSize(75);
fpsNum.setFillColor(Color::Green);
fpsNum.setPosition(20, 20);
while (window.isOpen())
{
Event event;
while (window.pollEvent(event))
{
if (Keyboard::isKeyPressed(Keyboard::Escape))
{
window.close();
}
}
//Update
fps.update();
std::cout << fps.getFPS() << std::endl;
std::ostringstream ss;
ss << fps.getFPS();
fpsNum.setString(ss.str());
//Draw
window.clear();
window.draw(fpsNum);
window.display();
}
return 0;
}
- 当我 运行
std::cout << fps.getFPS() << std::endl;
控制台中显示正确的 FPS 时,我知道 getFPS() 正在执行它的工作。据我了解,问题出在 SFML 如何显示实际文本的某个地方,因为我在屏幕上看到的只是 FPS 应该显示的绿点。
图片: Picture of the output, note the green dot at the top left corner.
注意:我知道这里没有显示主要功能,我没有理由显示这段代码,因为它与问题无关。
编辑:我还尝试在 fpsNum.setString("hello");
中显示静态“Hello”,但它也没有显示。
您是否尝试过只输入纯文本而不是 fps 计数?您可以尝试检查另一种字体是否可以工作,或者如果文件未加载则抛出错误。
if (!font.loadFromFile("fonts/KOMIKAP_")) {
std::cout << "Error with the file" << std::endl;
}
如果出现错误,请尝试将 .ttf 添加到字体中?