Hallo Leute,
ich arbeite gerade an einem 2D Rollenspiel, ich habe schon ein ECS und Tilemaps implementiert.
Ich habe die Tilemaps in Chunks aufgeteilt und update bzw. rendere nur die benötigten Chunks.
Allerdings wird nur der erste Chunk (0, 0) richtig initialisiert. Wenn ich in einen anderen Chunk gehe, werden die Tiles nicht gerendert.
Sobald ich versuche, die Vertexpositionen der anderen Chunks auszugeben, stürzt das Programm bei der cout-Funktion ab. Daher denke ich mal, dass die Chunks außer 0, 0 falsch initialisiert werden. An dem Render-System sollte es eigentlich nicht liegen, da die Chunks, die gerendert werden sollen, erkannt werden und auf dem Bildschirm gezeichnet werden.
Hier mal wie ich die Chunks initialisiere
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
map->chunks = sf::Vector2i((width/sizes.CHUNK_SIZE.x)+1, (height/sizes.CHUNK_SIZE.y)+1); //chunk size
map->vecChunks.assign(map->chunks.x, std::vector<sf::VertexArray>(map->chunks.y, sf::VertexArray(sf::Quads)));
for(int iy = 0; iy < height; ++iy){
for(int ix = 0; ix < width; ++ix){
appendTile(ix, iy, map->vecChunks[ix/sizes.CHUNK_SIZE.x][iy/sizes.CHUNK_SIZE.y], wholeMap);
}
}
|
appendTile-Methode
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
if(wholeMap[gx][gy].x != -1 && wholeMap[gx][gy].y != -1){
sf::Vertex ver;
ver.position=sf::Vector2f(gy * sizes.TILES_SIZE.y + sizes.TILES_SIZE.y, gx * sizes.TILES_SIZE.x);
ver.texCoords=sf::Vector2f(wholeMap[gx][gy].x * sizes.TILES_SIZE.x + sizes.TILES_SIZE.x, wholeMap[gx][gy].y * sizes.TILES_SIZE.y);
garr.append(ver);
ver.position=sf::Vector2f(gy*sizes.TILES_SIZE.y, gx*sizes.TILES_SIZE.x);
ver.texCoords=sf::Vector2f(wholeMap[gx][gy].x * sizes.TILES_SIZE.x, wholeMap[gx][gy].y * sizes.TILES_SIZE.y);
garr.append(ver);
ver.position=sf::Vector2f(gy*sizes.TILES_SIZE.y, gx*sizes.TILES_SIZE.x+sizes.TILES_SIZE.x);
ver.texCoords=sf::Vector2f(wholeMap[gx][gy].x * sizes.TILES_SIZE.x, wholeMap[gx][gy].y * sizes.TILES_SIZE.y + sizes.TILES_SIZE.y);
garr.append(ver);
ver.position=sf::Vector2f(gy*sizes.TILES_SIZE.y+sizes.TILES_SIZE.y, gx*sizes.TILES_SIZE.x+sizes.TILES_SIZE.x);
ver.texCoords=sf::Vector2f(wholeMap[gx][gy].x * sizes.TILES_SIZE.x + sizes.TILES_SIZE.x, wholeMap[gx][gy].y * sizes.TILES_SIZE.y + sizes.TILES_SIZE.y);
garr.append(ver);
}
|
wholeMap beinhaltet die Tilemap, also z. B.
|
Quellcode
|
1
2
3
|
1,0 1,0 -1,-1
1,1 -1,-1 1,1
1,0 1,0 1,0
|
Warum werden die Chunks außer 0,0 falsch initialisiert?
Danke, dass ihr bis hierhin gelesen habt.
Viele Grüße