繁体   English   中英

如何在函数/方法中使用 sf::window

[英]How can I use a sf::window in a function/method

我想创建一个接受string的类,并在sfml的框中给出string 为了使绘图更容易,我创建了一个函数,它接受一个renderwindow的指针并用文本绘制框(我还没有实现框)但是当我运行它时我得到一个错误,它是不允许的读这个

我已经尝试通过引用传递窗口,但是没有用,结果是一样的

//Textbox.h

class textbox
{
public:
    sf::Text txtinbox;

    void draw(sf::RenderWindow* on)
    {
        on->draw(this->txtinbox);
    }//Error

    textbox(std::string txinbox)
    {

        sf::Font font;
        font.loadFromFile(fontfile);
        sf::Text text(txinbox , font);
        text.setCharacterSize(30);
        text.setStyle(sf::Text::Bold);
        text.setFillColor(sf::Color::White);
        txtinbox = text;

    }


    ~textbox()
    {}
private:

};

你有未定义的行为。

上这个网站,找到这句话:

重要的是要注意 sf::Text 实例不会复制它使用的字体,它只保留对它的引用。

和这个

永远不要编写使用本地sf::Font 实例来创建文本的函数

现在看看你的构造函数:

{
    sf::Font font;                           // LOCAL VARIABLE
    font.loadFromFile(fontfile);
    sf::Text text(txinbox , font);           // GET REFERENCE TO LOCAL
    text.setCharacterSize(30);
    text.setStyle(sf::Text::Bold);
    text.setFillColor(sf::Color::White);
    txtinbox = text;
                                             // LOCAL IS DELETED
                                             // txtinbox HAS DANGLING REFERENCE
}

所以你必须延长font生命周期,例如让它成为你的类的数据成员。

class textbox
{
public:
    sf::Text txtinbox;
    sf::Font font;

     textbox(std::string txinbox)
     {
         font.loadFromFile(fontfile);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM