Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

02.06.2016, 19:09

[Gelöst][SFML] Tilemap chunks werden nicht richtig initialisiert

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 :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »isko« (03.06.2016, 17:29)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

02.06.2016, 20:52

Für solche Probleme gibt es den Debugger. Lerne ihn bitte zu benutzen, dies ist die perfekte Gelegenheit.