2012-05-08 78 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本身調整大小,所以你不應該擔心大小。