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