C++ 从外部调用封装类成员函数时未加载SFML纹理
tl/dr:我将一个函数调用从类内部移动到类外部,函数停止工作 我已经遇到了一年左右的最令人困惑的问题,我一直在用C++工作。我找不到任何东西来解释这里发生了什么,但老实说,我甚至很难制定一个SEO问题 这里的基本操作相当简单C++ 从外部调用封装类成员函数时未加载SFML纹理,c++,c++11,sfml,C++,C++11,Sfml,tl/dr:我将一个函数调用从类内部移动到类外部,函数停止工作 我已经遇到了一年左右的最令人困惑的问题,我一直在用C++工作。我找不到任何东西来解释这里发生了什么,但老实说,我甚至很难制定一个SEO问题 这里的基本操作相当简单 创建sf::纹理和sf::精灵对象 将纹理加载到sf::texture对象 将sf::Sprite的纹理设置为纹理对象 显示sf::Sprite 在一个函数中,所有4个步骤都很顺利,但因为我的目标是构建一个游戏引擎,所以我开始将其封装到更大的类中 我创建了一个GameEn
sf::Texture d_texture;
sf::Sprite d_sprite;
bool isactive;
public:
GameObject(GameEngine *engine, ObjectType type);
void addtexture(std::string textpath);
void render();
及
我只看到一个黑屏。但在这两种情况下,我都得到了纹理已加载的消息。假设您实际渲染的是d_背景,我认为错误在这里:
Loading_Screen::Loading_Screen(GameEngine *engine)
{
GameObject temp(engine, ObjectType::BACKGROUND);
d_backgrounds.push_back(temp);
temp.addtexture("textures//MenuBackGround.png");
}
您正在创建一个GameObject
对象。然后将其副本插入容器中,您稍后尝试添加纹理的对象与插入的对象不同
试试这个:
Loading_Screen::Loading_Screen(GameEngine *engine)
{
GameObject temp(engine, ObjectType::BACKGROUND);
temp.addtexture("textures//MenuBackGround.png");
d_backgrounds.push_back(temp);
}
看看SFML api,
Texture
和Sprite
都有合适的复制构造函数,所以这样应该没问题。不,这不起作用,同时我自己也在玩它,试图让d_背景成为指针向量,这很遗憾并没有解决问题。就像我说的,我唯一需要做的事情就是从工作变为不工作的更改是调用addtexture函数的位置的更改,在这两种情况下渲染都是以相同的方式完成的。无论如何,这是错误的。您在传递对象的副本时没有初始化纹理。尝试使用指针时,是否添加了如下对象?GameObject*tmp=new GameObject(…);temp->addtexture(…);d_背景。向后推(temp);我目前还没有想到SFML api,但可能是精灵和作为对象和复制构造函数的纹理弄乱了。我将sf::texture和sf::sprite更改为游戏对象的指针,从而消除了在处理游戏对象时可能发生的任何复制。谢谢您的时间。
Loading_Screen::Loading_Screen(GameEngine *engine)
{
GameObject temp(engine, ObjectType::BACKGROUND);
d_backgrounds.push_back(temp);
temp.addtexture("textures//MenuBackGround.png");
}
Loading_Screen::Loading_Screen(GameEngine *engine)
{
GameObject temp(engine, ObjectType::BACKGROUND);
d_backgrounds.push_back(temp);
temp.addtexture("textures//MenuBackGround.png");
}
Loading_Screen::Loading_Screen(GameEngine *engine)
{
GameObject temp(engine, ObjectType::BACKGROUND);
temp.addtexture("textures//MenuBackGround.png");
d_backgrounds.push_back(temp);
}