2012-05-08 54 views
1

如何使用SFML和矢量标题创建Sprites矢量? 我开始喜欢矢量试图创建使用矢量的sfml中的瓷砖地图

vector<sf::Sprite> test; 

,我试图做的push_back(),但我不知道我需要把里面的“()”。

无论如何,我的载体将是41x31,所以有一种方法做T类似

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'未在此范围内声明”

回答

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]
在任一情况下 。

希望这有助于

+0

感谢您的答案,但我仍然有这个 – Mete

+0

什么是你得到了错误的错误? – JuJoDi

1

Yo你需要创建一个Sprite并将其放入向量中。

sf::Sprite sprite; 
test.push_back(sprite); 

很容易!

A std::vector本身调整大小,所以你不应该担心大小。