尝试使用矢量在 sfml 中创建图块地图

Trying to create a Map of Tiles in sfml using a vector

本文关键字:创建 地图 sfml      更新时间:2023-10-16

如何使用SFML和向量头创建精灵向量?我像这样开始向量

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

编辑:实际上我撒谎了,如果你知道地图的确切大小,那么你可以使用

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]
无论哪种情况。

希望这有帮助

你只需要创建一个精灵并将其放入向量中。

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

简单易行!

std::vector会自行调整大小,因此您无需担心大小调整。