通过循环加载精灵

时间:2015-12-28 18:38:11

标签: c++ loops sprite sfml

我使用SFML在C ++中创建了一个小项目。我添加了精灵(一个角色)。我已经组织了精灵,如Assets/Player/Idle/Idle1.jpg然后Idle2.jpg等等。

我像这样初始化精灵:

texture = new Texture[116];
sprite = new Sprite[116];
texture[0].loadFromFile("Assests/Iori/Ready1.png");
sprite[0].setTexture(texture[0]);
texture[1].loadFromFile("Assests/Iori/Ready2.png");
sprite[1].setTexture(texture[1]);
texture[2].loadFromFile("Assests/Iori/Ready3.png");
sprite[2].setTexture(texture[2]);
texture[3].loadFromFile("Assests/Iori/Ready4.png");
sprite[3].setTexture(texture[3]);
texture[4].loadFromFile("Assests/Iori/Ready5.png");
sprite[4].setTexture(texture[4]);
texture[5].loadFromFile("Assests/Iori/Ready6.png");
sprite[5].setTexture(texture[5]);
texture[6].loadFromFile("Assests/Iori/Ready7.png");

等等。现在这个方法工作正常并完全加载我的精灵。但我不认为这是有效或正确的方法。我必须加载100多个精灵,这对程序员来说只是一团糟。

我想知道你是否可以通过循环(for / while)初始化这些sprite,这会大大减少代码。

1 个答案:

答案 0 :(得分:2)

使用基本for循环并动态构造纹理名称 您可能需要使用显式转换为std::stringchar*,具体取决于loadFromFile方法。

static const int count = 116;
texture = new Texture[count];
sprite = new Sprite[count];

for (int i = 0; i < count; ++i)
{
    texture[i].loadFromFile("Assests/Iori/Ready" + std::to_string(i + 1) + ".png");
    sprite[i].setTexture(texture[i]);
}