Witam, mam problem z dokładnym zrozumieniem jak działa metoda load w przykładzie mapy kafelkowej do tego artykułu z kursu sfml: https://www.sfml-dev.org/tutorials/2.4/graphics-vertex-array.php
Stwierdziłem że w kodzie dam informacje o tym co rozumiem a czego nie (jak czegoś nie rozumiem to dam !! przed komentarzem) :
class TileMap : public sf::Drawable, public sf::Transformable
{
public:
bool load(const std::string& tileset, sf::Vector2u tileSize, const int* tiles, unsigned int width, unsigned int height)
//rozumiem że tileset to nazwa pliku z teksturaami ,tile size to wielkosc w pikselach tego obrazka, tiles to tablica terenu, widh i height to dlugosc i szerokosc mapy (tablicy)
{
// wczytanie atlasu tekstur
if (!m_tileset.loadFromFile(tileset))
return false;
// zmiana rozmiaru tablicy, tak aby pasowała do wielkości mapy
m_vertices.setPrimitiveType(sf::Quads);
m_vertices.resize(width * height * 4);
// zapełnianie vertex array, po jednym na kafel (zamiast tych wszystkich wyszukiwaqn dal bym tablice dwu wymiarową)
for (unsigned int i = 0; i < width; ++i)
for (unsigned int j = 0; j < height; ++j)
{
// !!pobranie obecnego numeru kafla ,CZEMU RAZY WIDTH?!
int tileNumber = tiles[i + j * width];
// znalezienie jego pozycji na tileset ,rozumiem ze tu chodzi o znalezenie w obrazku danej tekstury
int tu = tileNumber % (m_tileset.getSize().x / tileSize.x);
int tv = tileNumber / (m_tileset.getSize().x / tileSize.x);
// pobranie wskaźnika do bieżącego kafla czworokąta (czy zamiast wskaznika nie mozna pracowac odrazu na vertexArray ?)
sf::Vertex* quad = &m_vertices[(i + j * width) * 4];
// ustawienie 4 rogów (do ogarniecia)
quad[0].position = sf::Vector2f(i * tileSize.x, j * tileSize.y);
quad[1].position = sf::Vector2f((i + 1) * tileSize.x, j * tileSize.y);
quad[2].position = sf::Vector2f((i + 1) * tileSize.x, (j + 1) * tileSize.y);
quad[3].position = sf::Vector2f(i * tileSize.x, (j + 1) * tileSize.y);
// ustawienie 4 współrzędnych tekstury (to tez)
quad[0].texCoords = sf::Vector2f(tu * tileSize.x, tv * tileSize.y);
quad[1].texCoords = sf::Vector2f((tu + 1) * tileSize.x, tv * tileSize.y);
quad[2].texCoords = sf::Vector2f((tu + 1) * tileSize.x, (tv + 1) * tileSize.y);
quad[3].texCoords = sf::Vector2f(tu * tileSize.x, (tv + 1) * tileSize.y);
}
return true;
}
private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
// ustawienie przekształceń
states.transform *= getTransform();
// ustawienie tekstury
states.texture = &m_tileset;
// narysowanie
target.draw(m_vertices, states);
}
sf::VertexArray m_vertices; //tablica wierzcholkow
sf::Texture m_tileset; //tekstura
};
Dziękuje za pomoc i pozdrawiam