• 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

VPS Starter Arubacloud
0 głosów
311 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ź 359 wizyt
pytanie zadane 2 lipca 2017 w C i C++ przez soarez123 Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 193 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 125 wizyt
pytanie zadane 29 czerwca 2017 w Java przez Piotr Grądzki Nowicjusz (120 p.)

93,031 zapytań

141,995 odpowiedzi

321,300 komentarzy

62,379 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...