Witam, tworzę gierkę w SFML. Może powiem trochę jak wygląda u mnie wzorzec programu. Mam klasę o nazwie Program. Tam jest składowa typu sf::RenderWindow (okno) oraz najbardziej zewnętrzna pętla całego programu zawarta w publicznej metodzie o nazwie run() wywoływana bezpośrednio przez main(). Powiedziałem pętla programu a nie gry bo będzie też menu główne. Wobec tego mamy dwie dodatkowe klasy: GameProcess i MenuProcess, zawierają one odpowiednie składowe w sekcji prywatnej oraz metody loop(), metody te zawierają odpowiednio pętlę gry dla programu i samej gry, metoda loop() zwraca odpowiednie komunikaty dla głównej pętli gry we wspomnianej metodzie run() w klasie Program. Dzięki temu możemy te komunikaty odpowiednio obsługiwać i tym samym zmieniać wskaźnik na inne instancje programu ( bo właśnie, chyba zrobię to tak klasy GameProcess i MenuProcess będą dziedziczyć z jednej abstrakcyjnej klasy bazowej o nazwie Process ):
Jest jednak pewna kwestia, metody wszystkich klas dziedziczących z Process będą potrzebowały używać okna gry stworzonego w konstruktorze klasy Program. Początkowo miałem dostarczać referencje na okno gry każdej funkcji z osobna która go potrzebuje. Zrobiłem jednak tak że w klasie ( na razie GameProcess ) mamy prywatną składową będącą referencją na okno gry ( inicjalizowaną w konstruktorze tej klasy za pomocą listy inicjalizacyjnej ):
//(przypominam że jeszcze nie zrobiłem głównej klasy Abstrakcyjnej, więc na razie pokazana klasa jeszcze z niej nie dziedziczy )
class GameProcess {
public:
GameProcess(sf::RenderWindow& win, Player pl);
signals loop();
private:
Player player;
sf::RenderWindow& r_window; //referencja
};
Każda metoda klasy GameProcessing ma do okna dostęp. Czy jednak jest to dobry i bezpieczny pomysł czy "może się na mnie zemścić" w przyszłości ?
Wolę się upewnić co o tym sądzicie już teraz by potem nie mieć problemów. Z góry dziękuje za rady