当在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多个精灵。如果你们有关于如何解决这个问题的想法,请告诉我。
答案 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。仍在修补矢量,如果我能找到方法,将添加到帖子中。