处理纹理/精灵的矢量@ SMFL

时间:2014-08-12 02:02:09

标签: c++ textures sprite

当在SMFL中使用纹理和精灵的向量时,这基本上是White Square Problem。在与它斗争了一段时间之后,我想出了一些代码,里面有一些指针,但仍然无法得到我想要的东西。

这是我在int main()

中的内容
vector<sf::Sprite> sprites;
vector<sf::Texture> textures;

// Load sprites
for(int i=0;i<3;i++){
    sf::Texture texture;
    texture.loadFromFile(resourcePath() + "pink_sq.png");
    textures.push_back(texture);
    vector <sf::Texture>::iterator it = textures.begin() + i;
    sf::Sprite sprite(*it);
    sprite.setPosition(i*100,i*100);
    sprites.push_back(sprite);
}
// Start the game loop
while (window.isOpen())
{
    window.clear();

    // Draw the sprite
    for(int i=0;i<sprites.size();i++)
        window.draw(sprites[i]);

    window.display();
}

我得到的只是(200,200)的第三个方格是粉红色。另外两个是白色的。某种方式纹理不会复制到前两个精灵。

我知道这个简单的代码,我可以避免向量,但这个代码只是为了演示。我将来可能会使用100多个精灵。如果你们有关于如何解决这个问题的想法,请告诉我。

1 个答案:

答案 0 :(得分:0)

您是否考虑过为纹理使用地图?无论我尝试使用矢量,它似乎都不起作用,功能dosn对地图的改变很大。我通常在处理精灵时使用地图,因为如果您愿意,可以将字符串作为索引,这样可以使您的代码更容易理解。

#include <map>
.
.
.
     vector<sf::Sprite> sprites;
    sf::Sprite sprite;
    map<int, sf::Texture> textures;

// Load sprites
    for(int i=0;i<3;i++){
        textures[i].loadFromFile(resourcePath() + "pink_sq.png");
        sprites.push_back(sprite);// loads a dummy sprite for a pushback
        sprites[i].setTexture(textures[i]);
        sprites[i].setPosition(i*100,i*100);

}
// Start the game loop
while (window.isOpen())
{

       window.clear();
    // Draw the sprite
    for(int i=0;i<sprites.size();i++){
            window.draw(sprites[i]);
            window.display();
            sf::sleep(sf::milliseconds(30)); // so the loop dosn't crash the program randomly
}


}

这种方式产生3个粉红色的盒子

希望这会有所帮助

P.S。仍在修补矢量,如果我能找到方法,将添加到帖子中。