SFML绘图问题

时间:2018-09-06 14:33:48

标签: c++ sfml

在这个项目中,我有这个Game类,它的主要游戏循环是它的功能之一,还有几个用于将字体和内容设置为成员变量的变量,还有一个Window类;环绕sf::RenderWindow的基本类。

我的问题是,在run类的Game函数内部,我可以用任何颜色清除窗口并显示,但无论是sf::Text都不能画任何东西例如sf::CircleShape等,将代码复制并粘贴到单独的文件中并进行编译。 Window::getSFMLWindow()仅返回对基础sf::RenderWindow的引用,没什么特别的。我还尝试删除Window类,仅使用sf::RenderWindow,但没有执行任何操作,因此问题不在于自定义窗口类。

这是我的代码,不相关的代码已删除:

Game.cpp

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;
    }
}

main.cpp

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();
}

编辑:

Window.hpp:

namespace GM {
    class Window {
      public:
        Window(std::string title = "title", int width = 1, int height = 1);

        sf::RenderWindow SFML_Window;
    };
}

Window.cpp:

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()函数仍然有效,所以我不知道。

0 个答案:

没有答案