SFML 2.1 A efektywne wczytywanie tekstur

0

Pisząc jeszcze w ALLEGRO5 tworzyłem sobie menager plików który to do 2 vectorów wczytywał informację:

Load=[Font]
[Load/Fonts/font1.ttf]
EndLoad

Load=[Items]
[Nowa Gra]
[Wczytaj gre]
[Zakoncz]
EndLoad

Load=[Image]
[Load/Images/menu.png]
EndLoad

Do jednego vecotra nazwę jak [Images][Font] a do drugiego ścieżki do obrazków,czcionki itd. Potem do vectora textur ładowałem textury z podanych ścieżek i wyświetlałem podczas ekranu wejściowego po kolei obrazek z logiem itd. Gdy się skończyły to czyściłem kontener i przechodziłem do okna menu.

W SFML2 sprawa wygląda inaczej, co więcej słyszałem że nie powinno się ładować obrazków do vectorów. Poszukałem trochę i dowiedziałem się że powinno się tworzyć menager textów, taki jak jest podany na tej stronie:
https://www.binpress.com/tutorial/creating-a-city-building-game-with-sfml-part-3-textures-and-animations/125

Zauważyłem jednak że twórca tego kodu zamiast tileseta posiada każdą bitmape osobno (trawy,drzew,wody). Dodatkowo nie rozwiązuje to problemu dynamicznego wczytywania bitmap. Bo taki menager przypisuje do każdego stworzonego obiektu tile - bitmape, ale nie jest to kontener bitmap które mają być po kolegi wyświetlane jak to opisałem na początku, i często widzimy w grach. Jak to powinno być rozwiązane?

0

Nie do końca rozumiem bo troche chaotycznie to napisałeś, ale czy chodzi Ci o to że nie chcesz wczytywać wielu tekstur, tylko jedną ze wszystkim i odpowiednio ją kroić?

0

Jak miałem ekran wejściowy w grze to wczytywałem z pliku ścieżki do wszystkich obrazków które mają się pojawiać przed pojawieniem ekranu menu. Ale w SFML 2.1 nie da się tak pobrać do vectora wszystkich bitmap, dlatego nie wiem jak to rozwiązać.

0

https://github.com/LaurentGomila/SFML-Game-Development-Book/tree/master/02_Resources

a wczytywać do vectora możesz, ale nie wiem w jaki sposób byś się odwoływał do odpowiednich tekstur.

vector.push_back(sf::Texture());
vector.back().loadFromFile();
0
tffsts napisał(a):

https://github.com/LaurentGomila/SFML-Game-Development-Book/tree/master/02_Resources

a wczytywać do vectora możesz, ale nie wiem w jaki sposób byś się odwoływał do odpowiednich tekstur.

vector.push_back(sf::Texture());
vector.back().loadFromFile();

Za pomocą odpowiednich kluczy, jakimi są w tym wypadku indeksy.

Tutaj od siebie:
https://github.com/spartanPAGE/Vulture/blob/master/util/ResourceManager.hpp
https://github.com/spartanPAGE/VultureTests/blob/master/util/ResourceManager.hpp

Prymitywny przykład użycia:

vulture::ResourceManager<Texture> textureManager;
//...
auto bulletTexKey = textureManager.load("bullet.png");
auto warriorTexKey = textureManager.namedEmplace("warrior", args);
auto bulletTexName = textureManager.keyForName(bulletTexKey);

textureManager.operate(warriorTexKey, [&](const Texture &tex){
    int x = 200, y = 400;
    //aktualnie zmyślona klasa
    draw.texture(tex, x, y);
});

1 użytkowników online, w tym zalogowanych: 0, gości: 1