在这个项目中,我有这个Game
类,它的主要游戏循环是它的功能之一,还有几个用于将字体和内容设置为成员变量的变量,还有一个Window
类;环绕sf::RenderWindow
的基本类。
我的问题是,在run
类的Game
函数内部,我可以用任何颜色清除窗口并显示,但无论是sf::Text
都不能画任何东西例如sf::CircleShape
等,将代码复制并粘贴到单独的文件中并进行编译。 Window::getSFMLWindow()
仅返回对基础sf::RenderWindow
的引用,没什么特别的。我还尝试删除Window
类,仅使用sf::RenderWindow
,但没有执行任何操作,因此问题不在于自定义窗口类。
这是我的代码,不相关的代码已删除:
namespace GM {
Game::Game() {
}
int Game::run() {
sf::Font testFont;
if(!testFont.loadFromFile(this->fontPath)) {
std::cerr << "error in loading font" << std::endl; // does not throw error
return 1;
}
sf::Text testText;
testText.setFont(testFont);
testText.setString("this is a test string");
testText.setCharacterSize(30);
testText.setFillColor(sf::Color::White);
sf::Event wndEvent;
while(window.getSFMLWindow().isOpen()) {
while(window.getSFMLWindow().pollEvent(wndEvent)) {
switch(wndEvent.type) {
case sf::Event::Closed:
window.close();
return 0;
}
}
window.getSFMLWindow().clear(sf::Color::Black); // does draw
window.getSFMLWindow().draw(testText); // does not draw
window.getSFMLWindow().display();
}
return 1;
}
}
int main() {
GM::Game mainGame;
mainGame.window.setSize(1200, 675);
mainGame.window.setTitle("game");
mainGame.window.setFramerateLimit(60);
mainGame.fontPath = "./media/font/SourceHanSansJP-Light.otf";
mainGame.run();
}
namespace GM {
class Window {
public:
Window(std::string title = "title", int width = 1, int height = 1);
sf::RenderWindow SFML_Window;
};
}
namespace GM {
Window::Window(std::string title, int width, int height) {
this->getSFMLWindow().create(sf::VideoMode(width, height), title, sf::Style::Titlebar | sf::Style::Close);
}
sf::RenderWindow& Window::getSFMLWindow() {
return this->SFML_Window;
}
}
如您所见,我的Window
类非常少,我可能会对其进行改进,但是我仍然看不到它怎么会引起问题。可能是因为该窗口是在与Game
不同的类中创建的?但是clear()
和display()
函数仍然有效,所以我不知道。