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

Jeden static, kilka klas?

Object Storage Arubacloud
0 głosów
166 wizyt
pytanie zadane 21 października 2015 w C i C++ przez jeżozwierz Początkujący (490 p.)
Hej!

Tworzę prostą gierkę 2D typu "Space Invaders" przy pomocy SFMLa. Hierarchia statków wygląda tak, że na samej górze hierarchii klas mam jedną abstrakcyjną, a po niej dziedziczą konkretne typy statków, po tych natomiast (niektórych) dziedziczą ich formy po ewolucji (coś jak Pokemon<-Pikachu<-Raichu). I teraz chcę dla każdej klasy statków zdefiniować texturę i sprite'a używając atrybutu static, no bo przecież każda "rodzina" statków będzie je miała dokładnie takie same. I teraz: jak mam to zrobić? Bo chyba jak w klasie ze szczytu hierarchii to zadeklaruję, to dostanę jedną texturę i sprite'a dla wszystkich statków, nie?

Pozdrawiam

2 odpowiedzi

0 głosów
odpowiedź 21 października 2015 przez Patrycjerz Mędrzec (192,320 p.)
Oczywiście, jeśli zadeklarujesz jakąś teksturę lub sprite'a jako statyczne pole w klasie abstrakcyjnej, to klasy pochodne także będą je posiadać.
komentarz 21 października 2015 przez jeżozwierz Początkujący (490 p.)
No tak, ale statyczne pole = wspólne dla wszystkich i koniec. A ja chcę po jednej texturze i sprajcie dla każdej klasy statków (no oprócz tej abstrakcyjnej).
komentarz 21 października 2015 przez Patrycjerz Mędrzec (192,320 p.)
Dziedziczenie składowych statycznych polega jedynie na nadaniu im widoczności w danej klasie, nie stworzeniu ich nowych kopii. Jeśli będziesz dziedziczył teksturę i sprite każdej klasie, to one będą działały tylko na jednej wersji tych zmiennych (tak, jakbyś pracował na zmiennych globalnych).

Co do rozwiązania problemu, to radzę stworzyć teksturę gdzieś na zewnątrz tej hierarchi klas lub zrobić z niej zmienną statyczną klasy abstrakcyjnej dziedziczonej przez klasy pochodne. A swojego sprite'a powinien posiadać każdy obiekt, bo jak inaczej wyświetlisz wszystkie statki na ekranie? (można użyć tylko jednego sprite'a, ale jest to sposób bardzo nieefektywny)
komentarz 21 października 2015 przez jeżozwierz Początkujący (490 p.)
Masz rację, z tym sprajtem to się popisałem, haha xD

Po prostu pomyślałem o teksturze, a sprite napisałem przez analogię bez przemyślenia tego.
komentarz 21 października 2015 przez event15 Szeryf (93,790 p.)
@Patrycjerz szacun :D widać ostro sie uczysz! gz:)
0 głosów
odpowiedź 21 października 2015 przez criss Mędrzec (172,590 p.)

Możesz zrobić to na takiej zasadzie:

class Parent 
{
    static sf::Texture tex;
public:
    virtual sf::Texture& getTex() const {
                 return tex;
    }
};
 
class Child : public Parent 
{
    static sf::Texture tex;
public:
    sf::Texture& getTex() const {
        return tex;
    }
};

Btw. nie myślałeś o wykorzystaniu wskaźników? Tzn. każdy obiekt trzyma wskaźnik na teksture.

PS: dokopałem się do czegoś takiego https://github.com/SFML/SFML/issues/741

komentarz 21 października 2015 przez jeżozwierz Początkujący (490 p.)
Mhm, no to sobie podaruję ten static jeśli chodzi o SFML'a.

Dzięki za pomysł ze wskaźnikami . W sumie logiczne - chcę jedną teksturę dla jednej rodziny, no to niech sobie cała rodzina ją wskaże ;d

Podobne pytania

0 głosów
3 odpowiedzi 236 wizyt
pytanie zadane 5 sierpnia 2016 w C i C++ przez dziki indyk Użytkownik (940 p.)
0 głosów
1 odpowiedź 703 wizyt
pytanie zadane 9 kwietnia 2019 w C# przez rav89lodz Użytkownik (590 p.)
0 głosów
1 odpowiedź 201 wizyt
pytanie zadane 20 stycznia 2019 w Java przez ShockOfficial Początkujący (390 p.)

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 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!

...