我正在编写2D引擎,这是我的问题: 每个瓷砖都有一个'纹理'数字(0:网格,1:草等......) 当我试图像这样改变数值时:
maps[currentMapID].getLayerArray()[l].getTileArray()[t].setTexture(currentSelectedTexture);
(l,t等......来自'for'循环。)
没有任何变化,数值仍为0。
以下是.setTexture(..)
的代码:
void tile::setTexture(int t)
{
numTexture = t;
}
当我创建测试图块时,此代码完全正常工作。
我的代码(类)的结构是:
Map > layer > tile. => all of them in a class wich handle graphics.
我怀疑问题来自于此(同样适用于map class
,每个人都有一个std::vector<layer>
和类似的功能 - &gt;):
std::vector<tile> layer::getTileArray()
{
return tiles;
}
它是否从我班级或副本中归还std::vector<layer>
?如果它是副本,则可以解释该图块的纹理编号保持不变。
如果它是副本,我如何从另一个类改变tile.numTexture
?指针?参考文献?(我真的不明白这个)
我还检查了currentSelectedTexture
,那里没有问题。
答案 0 :(得分:6)
功能
std::vector<tile> layer::getTileArray()
{
return tiles;
}
返回副本,最后修改副本的内容。
更改它以返回参考。
std::vector<tile>& layer::getTileArray()
{
return tiles;
}
如果函数getLayerArray()
具有相似的签名,您还需要更改它。