如何return sprite from method to main 然后绘制呢?
How to return sprite from method to main and then draw it?
我写了下面的代码,但它不打印图片。我只看到黑屏,没有别的。纹理拒绝出现。
这些代码只是我遇到的问题的说明。基本上我的目标是创建具有特定 TextureRect
的 sprite 并将该 sprite 发送到 main,在那里我可以为该 sprite 设置纹理然后绘制它。
如果可以请告诉我我应该怎么做
ps。我尝试在方法内部将纹理设置为 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
函数有两个问题:一个是它 return 是一个对象 按值 ,即它是一个副本。另一个问题是它是 local 变量的副本。因此,每次您调用该函数时,都会为 sprite
局部变量创建一个 new 对象,并且一个新的 copy 是 returned.
第一个问题意味着每次你做例如
sprite1.print().setTexture(texture);
您只需修改函数 return 编辑的(临时)副本。第二个问题就是不管你调用多少次函数,它总是会为局部变量创建一个全新的对象。
一个可能的解决方案是使局部变量成为 class 中的 member 变量,而 return 成为 reference 到它。
我写了下面的代码,但它不打印图片。我只看到黑屏,没有别的。纹理拒绝出现。
这些代码只是我遇到的问题的说明。基本上我的目标是创建具有特定 TextureRect
的 sprite 并将该 sprite 发送到 main,在那里我可以为该 sprite 设置纹理然后绘制它。
如果可以请告诉我我应该怎么做
ps。我尝试在方法内部将纹理设置为 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
函数有两个问题:一个是它 return 是一个对象 按值 ,即它是一个副本。另一个问题是它是 local 变量的副本。因此,每次您调用该函数时,都会为 sprite
局部变量创建一个 new 对象,并且一个新的 copy 是 returned.
第一个问题意味着每次你做例如
sprite1.print().setTexture(texture);
您只需修改函数 return 编辑的(临时)副本。第二个问题就是不管你调用多少次函数,它总是会为局部变量创建一个全新的对象。
一个可能的解决方案是使局部变量成为 class 中的 member 变量,而 return 成为 reference 到它。