• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

sfml - wczytanie obrazka do obiektu static const image

Object Storage Arubacloud
0 głosów
232 wizyt
pytanie zadane 5 sierpnia 2016 w C i C++ przez dziki indyk Użytkownik (940 p.)

Klasa Image z biblioteki sfml nie ma konstruktora wczytującego od razu obraz z pliku, tak jak to jest w przypadku np. klasy Texture.

Czy istnieje jakiś sposób żeby wczytać do obiektu static const sf::Image obraz z pliku?

Oto fragment klasy:
 

template <unsigned int width_p, unsigned int height_p>
class Chunk
{
    private:
        static const DataManager <std::string, Tile> tile_list;
        static const DataManager <sf::Color, std::string> tile_colors;
        static const sf::Texture tile_textures;
        static const sf::Image game_map;
        static const sf::Vector2u game_map_size;

        sf::Vector2u position;

        Tile** tiles;

    public:
        int width();
        int height();
        int size();

        Tile* at(int pos);
        Tile* at(int x, int y);

        Tile* begin();
        const Tile* begin() const;
        Tile* end();
        const Tile* end() const;

        Chunk(sf::Vector2u position_p);
        Chunk();
        ~Chunk();
};


template <unsigned int width_p, unsigned int height_p>
const DataManager <std::string, Tile> Chunk<width_p, height_p>::tile_list("resources/tile_list.txt", true);

template <unsigned int width_p, unsigned int height_p>
const DataManager <sf::Color, std::string> Chunk<width_p, height_p>::tile_colors("resources/tile_colors.txt", true);

template <unsigned int width_p, unsigned int height_p>
const sf::Image Chunk<width_p, height_p>::game_map;
//     nie ma konstruktora wczytującego obrazek z pliku

template <unsigned int width_p, unsigned int height_p>
sf::Image Chunk<width_p, height_p>::game_map.loadFromFile("resources/map.png");

template <unsigned int width_p, unsigned int height_p>
const sf::Texture Chunk<width_p, height_p>::tile_textures("resources/tile_textures.png");

 

3 odpowiedzi

+1 głos
odpowiedź 5 sierpnia 2016 przez MetRiko Nałogowiec (37,110 p.)
wybrane 5 sierpnia 2016 przez dziki indyk
 
Najlepsza

1. Dlaczego to muszą być zmienne typu static const?
2. Dlaczego używasz tutaj template zamiast przesłać rozmiar do normalnego konstruktora? 
Jeżeli zmienna typu sf::Image nie byłaby stała mógłbyś użyć po prostu metody sf::Image::loadFromFile(...);

+1 głos
odpowiedź 5 sierpnia 2016 przez Michał Muzyka Pasjonat (24,080 p.)
nie wiem czemu używasz tutaj szablonów, ale wydaje mi się że nie da się, nie wiem czy nie lepiej jest przechowywać te zdjęcia w osobnej mapie i je kopiować do tego
0 głosów
odpowiedź 5 sierpnia 2016 przez dziki indyk Użytkownik (940 p.)
Static ponieważ wszystkie obiekty klasy Chunk powinny mieć dostęp do jednego egzemplarza obiektu sf::Image game_map. Do tego const bo nie powinien być zmieniany.

Template zamiast rozmiaru przekazywanego do konstruktora bo obiekty klasy Tile były przechowywane w std::array <std::array <Tile*, width>, height> i możliwe że do takiej implementacji jeszcze wrócę.

Rzeczywiście bez const można by było w konstruktorze wczytać obrazek jeżeli nie jest już wczytany.
Wpadłem jeszcze na takie rozwiązanie żeby stworzyć klasę dziedziczącą od sf::Image i przyjmującą w konstruktorze adres do wczytywanego następnie obrazka.

Dzięki za pomoc. :)
komentarz 5 sierpnia 2016 przez MetRiko Nałogowiec (37,110 p.)
To tak dodam jeszcze od siebie..
Myślałeś może o stworzeniu osobnej klasy, która była by swego rodzaju "Menadżerem tekstur"?
Mógłbyś w niej zamieścić wszystkie tekstury (oczywiście byłyby bez const) i ładować je w konstruktorze. Natomiast wszystkie klasy, które korzystałyby z tekstur posiadałyby wskaźnik do tego menadżera. Wskaźnik mógłby wskazywać na typ const dzięki czemu wszystko co by zwracał również by było typu const.
komentarz 5 sierpnia 2016 przez dziki indyk Użytkownik (940 p.)
Pomysł jest dobry ale przy obecnej ilości zasobów w moim projekcie napisanie takiej klasy i przekazywanie wskaźników do niej byłoby mniej praktyczne.

Podobne pytania

0 głosów
1 odpowiedź 334 wizyt
pytanie zadane 2 lipca 2017 w C i C++ przez soarez123 Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 163 wizyt
pytanie zadane 21 października 2015 w C i C++ przez jeżozwierz Początkujący (490 p.)
0 głosów
0 odpowiedzi 119 wizyt
pytanie zadane 29 czerwca 2017 w Java przez Piotr Grądzki Nowicjusz (120 p.)

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...