Hallo,
Ich bin momentan daran ein kleinen TileMap Editor mir zusammen zuschreiben. Ich bin soweit das ich meine Tilemap fast korrekt auslesen kann.
Momentan ist das Projekt so Aufgebaut das man insgesamt 4 Klassen hat:
Die Klasse Layer erzeugt den Vector mit allen Tiles und hier kommt das eigentliche Problem:
DatenQuelle sieht wie folgt aus:
Wie man sieht Iterariere ich nur Zeile für Zeile aber in der Funktion CheckMap nicht innerhalb der Zeile so das Die x koordinate nicht korrekt
gespeichert wird. Ich hab mich als ganz schön verzettelt irgendwo. Ich hab keinen ansatz gerade wie ich an das X korrekt komme. Hab grad
echt ein Brett vor dem Kopf.
Ich bin momentan daran ein kleinen TileMap Editor mir zusammen zuschreiben. Ich bin soweit das ich meine Tilemap fast korrekt auslesen kann.
Momentan ist das Projekt so Aufgebaut das man insgesamt 4 Klassen hat:
- Map - Verwaltet die Verschiedenen Layer einer TileMap
- Layer - Speichert ein Vector aller Tiles, sowie das benötigte Tileset und DatenQuelle zusätzlich als string
- Tileset - Erlaubt zugriff auf einzelne Tiles
- Tile - Speichert Metadaten zum Teil. Position im Tileset, Position im Layer
Die Klasse Layer erzeugt den Vector mit allen Tiles und hier kommt das eigentliche Problem:
DatenQuelle sieht wie folgt aus:
Code:
1,0 1,0 1,0 1,0 1,1 1,0 1,0 1,0 1,0 1,0 1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,0 1,0 x,x x,x x,x 0,0 x,x x,x x,x x,x 1,0 1,0 1,0 x,x x,x 1,0 x,x 1,1 x,x x,x 1,0 1,0 x,x x,x x,x 2,0 x,x x,x x,x x,x 1,0 1,0 x,x x,x x,x 3,0 1,1 0,0 x,x x,x 1,0 1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,0 1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,0 1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0
Code:
void Layer::CheckMap(std::string value,sf::Vector2i& globalposition) { std::string xx = value.substr(0,value.find(',')); //Find X component of coordinate in the tileset std::string yy = value.substr(value.find(',')+1); //Find y component of coordinate in the tileset int x,y,i,j; for(i = 0; i< xx.length();i++) { if(!std::isdigit(xx[i])) break; } for(j = 0; j< yy.length();j++) { if(!std::isdigit(yy[j])) break; } x = (i == xx.length()) ? std::atoi(xx.c_str()) : -1; y = (j == yy.length()) ? std::atoi(yy.c_str()) : -1; //Trauriger versuch... globalposition.x++; Tile* tmp = new Tile(this->m_Tileset,sf::Vector2i(x,y),globalposition,sf::Vector2i(32,32),0); this->m_Tiles.push_back(tmp); } void Layer::LoadLayer() { std::stringstream cstream(this->m_LayerSource); //Charakterstream std::string value; sf::Vector2i globalposition(0,0); if(this->m_Tileset == NULL) { this->m_Tileset = new graphic::Tileset(this->m_Tilesetpath,32); } while(!cstream.eof()) { while(std::getline(cstream,value,' ')) { if(value.length() > 0) { this->CheckMap(value,globalposition); std::cerr<<"x|y -- "<<globalposition.x<<"|"<<globalposition.y<<"\n"; } globalposition.y++; } globalposition.x = 0; } }
gespeichert wird. Ich hab mich als ganz schön verzettelt irgendwo. Ich hab keinen ansatz gerade wie ich an das X korrekt komme. Hab grad
echt ein Brett vor dem Kopf.
Comment