如何将sprite从方法返回到main然后绘制它?

时间:2015-02-19 03:49:19

标签: c++ sprite sfml

我写了下面的代码,但它没有打印图片。我只看到黑屏,没有别的。纹理拒绝出现。

这些代码只是我遇到的问题的例证。基本上我的目标是创建具有特定TextureRect的精灵并将此精灵发送到main,我可以为此精灵设置纹理然后绘制它。

如果你能做我应该做的事,请告诉我

PS。我试图将纹理设置为方法内的精灵,但后来我得到没有纹理的白色矩形

#include <SFML/Graphics.hpp>

class Sprite_draw
{
public:    
   sf::Sprite print()
    {
        sf::Sprite sprite;
        sprite.setTextureRect(sf::IntRect(10, 10, 10, 10));
        return sprite;
    }    
};

int main()
{
    sf::RenderWindow app(sf::VideoMode(800, 600), "SFML window");

    while (app.isOpen())
    {
        sf::Event event;
        while (app.pollEvent(event))
        {

            if (event.type == sf::Event::Closed)
                app.close();
        }

        Sprite_draw sprite1;
        sf::Texture texture;
        texture.loadFromFile("cb.bmp");
        sprite1.print().setTexture(texture);
        app.clear();
        app.draw(sprite1.print());
        app.display();
    }

    return EXIT_SUCCESS;
}

1 个答案:

答案 0 :(得分:1)

Sprite_draw::print函数有两个问题:一个是它按值返回一个对象,即它是一个副本。另一个问题是它是 local 变量的副本。因此,每次调用该函数时,都会为sprite局部变量创建一个 new 对象,并返回一个新的副本

第一个问题意味着你每次都这样做。

sprite1.print().setTexture(texture);

您只修改该函数返回的(临时)副本。第二个问题意味着调用函数的次数无关紧要,它将始终为局部变量创建一个全新的对象。

一种可能的解决方案是在本类中将局部变量设为成员变量,并向其返回引用