我有一个std::vector<sf::Texture>
我喜欢这样:
texture.loadFromFile(assets/texture/faceShadow.png);
textures.push_back(texture);
我的文件夹总是这样:
assets/texture/faceShadow.png
//texture: 1, 2, ...
//faceShadow: 1 to 9
这里是我目前使用std::cout
显示的示例:
assets/1/1.png - (entry n°0)
assets/1/2.png - (entry n°1)
assets/1/3.png - (entry n°2)
assets/1/4.png - (entry n°3)
assets/1/5.png - (entry n°4)
assets/1/6.png - (entry n°5)
assets/1/7.png - (entry n°6)
assets/1/8.png - (entry n°7)
assets/1/9.png - (entry n°8)
assets/2/1.png - (entry n°9)
assets/2/2.png - (entry n°10)
assets/2/3.png - (entry n°11)
assets/2/4.png - (entry n°12)
assets/2/5.png - (entry n°13)
assets/2/6.png - (entry n°14)
assets/2/7.png - (entry n°15)
assets/2/8.png - (entry n°16)
assets/2/9.png - (entry n°17)
我有纹理和faceShadow数字,我尝试获取entryNumber。
textures[entryNumber];
答案 0 :(得分:1)
您可以使用模运算:
std::string relativePathToAsset(unsigned entry)
{
if(entry > 17)
{
// handle invalid input (if you like)
}
return std::to_string(entry / 9 + 1) + "/" + std::to_string(entry % 9 + 1) + ".png";
}
但我相信还有一种方法可以从一个图像创建具有不同偏移的多个纹理。如果您正在制作动画,这似乎更合理。
修改强>
在下面的代码中:
return std::to_string(entry / 9 + 1) + "/" + std::to_string(entry % 9 + 1) + ".png";
// ^^^^^^^^^^^^^ ^^^^^^^^^^^^^
// formula for texture formula for faceShadow
您可以这样使用:
int texture = entry / 9 + 1;
int faceShadow = entry % 9 + 1;
最终修改:
你实际上需要一个我建议的反演公式:
textures[(texture - 1) * 9 + (faceShadow - 1)];