如何使用SFML和矢量标题创建Sprite的矢量? 我开始像
这样的矢量vector<sf::Sprite> test;
我正在尝试做一个push_back(),但我不知道我需要把它放在“()”里面。
无论如何,我的矢量将是41x31,所以有办法做
之类的事情 vector<vector<sf::Sprite> > test (41,vector<sf::Sprite>(31,??))
?
我正在使用它创建一个瓷砖地图,如果有人有更好的主意,我会很感激
编辑:
我仍然有错误,那就是我的代码
vector<vector<int> > mapc (5,vector<int>(5,1));
sf::Sprite mapa[5][5];
void fmap() {
mapc[0][0] = 1; mapc[0][1] = 1; mapc[0][2] = 1; mapc[0][3] = 1; mapc[0][4] = 1;
mapc[1][0] = 1; mapc[1][1] = 0; mapc[1][2] = 0; mapc[1][3] = 0; mapc[1][4] = 1;
mapc[2][0] = 1; mapc[2][1] = 0; mapc[2][2] = 1; mapc[2][3] = 0; mapc[2][4] = 1;
mapc[3][0] = 1; mapc[3][1] = 0; mapc[3][2] = 0; mapc[3][3] = 0; mapc[3][4] = 1;
mapc[4][0] = 1; mapc[4][1] = 1; mapc[4][2] = 1; mapc[4][3] = 1; mapc[4][4] = 1;
sf::Image w;
w.LoadFromFile("w.png");
sf::Image f;
f.LoadFromFile("f.png");
unsigned int i,j;
for(i=0;i<mapc.size();i++) {
for(j=0;j<mapc[i].size();j++) {
if(mapc[i][j] == 1) { sf::Sprite teste(w); }
else { sf::Sprite teste(f); }
mapa[i][j] = teste;
}
}
// test.push_back(teste);
}
它说
“'teste'未在此范围内声明”
答案 0 :(得分:2)
编辑:其实我撒了谎,如果你知道地图的确切大小,那么你可以使用
sf::Sprite map[41][31];
除非你的地图在运行期间要改变它的大小,你应该在堆栈上创建一个数组。
sf::Sprite temp; //used to initialize the map
map = new sf::Sprite[num_rows];
for(int i = 0; i < num_rows; i++){
map[i] = new sf::Sprite[num_cols];
for(int j = 0; j < num_cols; j++){
map[i][j] = temp;
}
}
然后你会想再次运行地图来初始化它。如果你不能这样做,你需要使用矢量,那么你可以为矢量做类似的事情。
sf::Sprite temp; //used to initialize the map
vector<vector<sf::Sprite> > map;
vector<sf::Sprite> row;
map.resize(0);
row.resize(0);
for(int i = 0; i < num_cols; i++){
row.push_back(temp);
}
for(int i = 0; i < num_rows; i++){
map.push_back(row);
}
然后您的地图可以作为
获取
映射[X] [Y]
在任一情况下。
希望这有帮助
答案 1 :(得分:1)
你需要创建一个Sprite并将其放在矢量中。
sf::Sprite sprite;
test.push_back(sprite);
轻松自在!
std::vector
自行调整大小,因此您无需担心调整大小。