1

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' はこのスコープで宣言されていません」

4

2 に答える 2

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);  
}  


どちらの場合も、マップにはmap[x][y]としてアクセスできます

お役に立てれば

于 2012-05-08T12:55:18.470 に答える
1

スプライトを作成してベクターに配置するだけです。

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

簡単ピーシー!

サイズ変更はそれ自体でサイズ変更されるstd::vectorため、サイズ設定について心配する必要はありません。

于 2012-05-08T12:51:49.127 に答える