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
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
bool TileMap::load(const char* filename) { m_filename = filename; //Tileset textur holen sf::Texture& tex = m_textures.get(Textures::TileSet); m_pTileset = &tex; m_vertices.setPrimitiveType(sf::PrimitiveType::Quads); // START PARSING! UINT numObj = getNumberOfObjects(); //65520 sind die Anzahl der zu erstellenden TileObjecte (alle MapTiles) //ich gehe davon aus da ja jedes Tile 4 Punkte Braucht * 4... m_vertices.resize(numObj * 4); try { std::ifstream fin(filename); if (fin.is_open() == false) { // error std::cout << "FAIL!" << std::endl; throw std::runtime_error("Cant open world map file ! "); } else { std::string line = ""; float numPos = 0; while (std::getline(fin,line)) { vector<string> tileData; boost::split_regex(tileData,line,boost::regex("(,)+")); if (!tileData[0].empty()) { //Parse stuff (Parsen funkt alles!) int id = boost::lexical_cast<int>(tileData[0].c_str()); float xpos = boost::lexical_cast<float>(tileData[1].c_str()); float ypos = boost::lexical_cast<float>(tileData[2].c_str()); int isBlocking = boost::lexical_cast<int>(tileData[3].c_str()); int Layer = boost::lexical_cast<int>(tileData[4].c_str()); MRect a; //MRect (Strut) hält IntRect und die Id for (auto it = m_textureRects.begin(); it != m_textureRects.end(); ++it) { if (it->id == id) { a = *it; //std::cout << "Found" << std::endl; break; } } //ID TileSize holen sf::Vector2f tsize = sf::Vector2f(a.rect.left, a.rect.top); // NumPos = Aktuelle ObjectNummer ( z.B. 1 von unseren 65520 Objekten ) // Hole Vertex ? Hier wird die Map fast richtig gezeichnet aber ich glaube das ist falsch :S // Wie gesagt X & Y ist schon vorhanden also das sind die *32 berechneten Coordinaten sind... sf::Vertex* quad = &m_vertices[numPos * 4]; // Welt Position des Tiles setzen ( die 4 Punkte ) quad[0].position = sf::Vector2f(xpos,ypos); quad[1].position = sf::Vector2f(xpos + tsize.x,ypos); quad[2].position = sf::Vector2f(xpos + tsize.x,ypos + tsize.y); quad[3].position = sf::Vector2f(xpos,ypos + tsize.y); // Koordinaten für das das Tile im Tileset definieren quad[0].texCoords = sf::Vector2f(a.rect.left,a.rect.top); quad[1].texCoords = sf::Vector2f(a.rect.left + a.rect.width, a.rect.top); quad[2].texCoords = sf::Vector2f(a.rect.left + a.rect.width, a.rect.top + a.rect.height); quad[3].texCoords = sf::Vector2f(a.rect.left, a.rect.top + a.rect.height); } //Zähler position erhöhen (Zeile x) | 1 Objekt pro Zeile numPos++; } fin.close(); std::cout << "Done!" << std::endl; } } catch (std::exception &e) { std::cout << e.what() << endl; } return true; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
void TileMap::draw(sf::RenderTarget& target,sf::RenderStates states) const { //Transform states.transform *= getTransform(); //Tileset setzen states.texture = m_pTileset; //Alle vertices zeichen target.draw(m_vertices, states); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 |
148,1152,5440,0,0 497,1152,5472,0,1 476,1152,5504,0,0 497,1152,5536,0,0 476,1152,5568,0,0 497,1152,5600,0,0 476,1152,5632,0,0 497,1152,5664,0,0 476,1152,5696,0,0 |
Quellcode |
|
1 2 3 |
for ( y ... < height ) for ( x ....< width ) save position to file |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »iSmokiieZz« (24.02.2015, 13:32)
Werbeanzeige