我如何计算我的数组输入

时间:2015-11-22 15:56:08

标签: c++ arrays math sfml

我有一个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];

1 个答案:

答案 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)];