c++ - 如何将 sprite 从 method 返回到 main 然后绘制它?

标签 c++ sprite sfml

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

这些代码只是我遇到的问题的说明。基本上我的目标是创建具有特定 TextureRect 的 sprite 并将此 sprite 发送到 main,我可以在其中设置此 sprite 的纹理然后绘制它。

如果可以请告诉我我应该怎么做

附言。我尝试在方法内部将纹理设置为 sprite,但随后我得到没有纹理的白色矩形

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

最佳答案

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

第一个问题意味着每次你做例如

sprite1.print().setTexture(texture);

您只需修改函数返回的(临时)拷贝。第二个问题意味着无论你调用多少次函数,它总是会为局部变量创建一个全新的对象。

一个可能的解决方案是使局部变量成为类中的一个成员变量,并返回一个引用给它。

关于c++ - 如何将 sprite 从 method 返回到 main 然后绘制它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28598298/

相关文章:

具有重叠矩形的 C++ 碰撞检测

c++ - 为什么这个整数会无限下降?

c++ - 当 vector<int> 长度增加时,如何设置断点?

c++ - OpenMP - 在两个 for 循环中使用临界区

CSS Sprite 问题

python - 如何获得渲染的 Sprite 图像的连续移动(pygame)

c++ - 类型相关模板名称

c++ - 重新组织 vector 的内容

actionscript-3 - 通过 Actionscript 3 中的 Sprite 路由鼠标事件

c++ - 从函数 C++/SFML 加载资源时出现问题