SFML白色矩形
SFML white rectangle
我正在尝试做一个简单的瓷砖地图。我有一个问题:当我设置地图时,只有白色方块。我通常会加载纹理,所以我不知道为什么会这样。
这是代码:
class Tile
{
private:
sf::Sprite sprite;
sf::Texture tex;
public:
Tile(int x, int y, sf::Texture tex)
{
this->tex = tex;
this->sprite.setTexture(this->tex);
this->sprite.setPosition(x, y);
}
void render(sf::RenderWindow* target)
{
target->draw(this->sprite);
}
class Tilemap
{
private:
Tile tiles[36][64];
sf::Texture tex[4];
public:
//const/dest
Tilemap()
{
this->tex[0].loadFromFile("Resources/Tilemap/Water/water1.png");
int x = -WIDTH+WIDTH/2;
int y = -HEIGTH/2;
for (int i = 0; i < 36; i++)
{
for (int j = 0; j < 64; j++)
{
this->tiles[i][j] = Tile(x, y, this->tex[0]);
x += 60;
}
y += 60;
x = -WIDTH + WIDTH / 2;
}
}
render(sf::RenderWindow* target, sf::Vector2f pos)
{
for (int i = 0; i < 34; i++)
{
for (int j = 0; j < 64; j++)
{
this->tiles[i][j].render(target);
}
}
};
Tilemap map;
map = Tilemap();
你在sprite
中有悬而未决的引用。
此悬空引用出现在以下行中:
this->tiles[i][j] = Tile(x, y, this->tex[0]);
参考资料对Sprite::setTexture
有什么看法?
纹理参数是指必须存在只要 精灵使用它。事实上,精灵不会存储自己的副本 纹理,但保留指向您传递到的纹理的指针 此函数。如果源纹理被破坏并且精灵尝试 要使用它,行为是未定义的。
问题到底在哪里?
Tile(x, y, this->tex[0]);
在这里,将创建Tile
的新实例。tex
和sprite
是Tile
的成员变量。setTexture
sprite
指的是tex
.
tiles[i][j] = Tile(x,...);
在上行中,调用了复制赋值运算符,该运算符从临时对象复制sprite
/tex
- 由Tile(x,y,..)
创建(。结果tiles[i][j]
您sprite
成员,该成员引用临时实例的纹理 -Tile(..)
(sprite
只持有指向纹理的指针(。最后,在完整表达式结束时,临时实例被销毁,Tile(..)
tex
被删除,并且tiles[i][j].sprite
保留指向纹理的无效指针。
溶液?
您必须添加Tile
的复制构造函数(复制赋值运算符(以正确初始化sprite
以保存自己的tex
(不引用从中复制的实例(:
例如:
Tile& operator=(const Tile& theOther)
{
this->tex = theOther.tex;
this->sprite.setTexture(this->tex);
return *this;
}
在默认生成的复制赋值运算符中,this->sprite
指向theOther.tex
纹理,这是错误的。
相关文章:
- C++函数中的精确"return"矩
- Opengl 3.1 GLSL 140 在 C++ 年输出白色在片段着色器中
- 内存错误低于在C++年实现埃拉托色尼筛分时的预期
- SFML白色矩形
- 列出埃拉托色尼的筛子
- 帧缓冲纹理变为白色(片段着色器不会影响它)
- 将 MFC 图像初始化为纯色
- vkCmdCopyImageToBuffer 生成纯色图像
- 在Qt C++中绘制HSV色轮
- SystemParametersInfo将背景设置为纯色,而不是实际设置图片
- 如何在SDL2窗口上使用Cairo绘制一条白色直线
- 以特征形式排列矩阵列
- 如何在 Win32 应用中拖动纯色矩形,而不会产生白色闪烁,也不会干扰其他屏幕对象
- openCV-矩()函数中的参数
- 我需要像透明色一样的白色
- 使用hu矩训练SVM
- 电机转矩PID控制
- 使用OpenMP原子并行更新矩阵列
- 通过OpenCV中的轮廓矩查找椭圆的参数
- 高效访问矩阵列