Witam, pisząc moje projekty, zawsze mam problem jak wszystko dobrze zorganizować tzn. podzielenia projektu na pliki, klasy itp. itd.
"Taktyka" którą stosuję, to podzielenie różnego rodzaju "ekranów" na osobne klasy:
Mam różne klasy "Game""MainMenu" itp. każda z nich obsługuje różny rodzaj wyświetlania elementów.
Game wyświetla gracza, tło, no generalnie obsługuje całą rozgrywkę. MainMenu, obsługuje menu itp.
Dotychczas stosowałem metodę robienia pętli w każdej klasie. Tzn.:
Game game; game.run(); //Tutaj znajduje się pętla oraz funkcja po zakończeniu pętli zwraca jakąś wartość, np. punkty MainMenu menu; menu.run(); //Tutaj także jest pętla...
Jednak mój ostatni projekt postanowiłem zorganizować nieco inaczej.
tzn. w funkcji main() utworzyć jedną główną pętlę gry dla całego projektu i tak wszystko obsługiwać:
int main(){ Game game; while(window.isOpen()){ game.update(); window->clear(); window.draw(game); sf::Event event; while(window.pollEvent(event){ if(event.type == sf::Event::Closed) window.close(); game.input(event); } } }
w klasie Game znajduje się obiekt klasy sf::RenderTexture w którym wszystko jest rysowane, po czym rysowane w samym oknie za pomocą wirtualnej funkcji odziedziczonej po klasie sf::Drawable
Wszystko szło jak po maśle, tworzyłem, tworzyłem aż w końcu zechciałem woku statku (Gra polega na "lataniu" statkiem po kosmosie itp.) umieścić okrągłego Health Bara oraz Ammo Bara.
A więc według mojej logiki, stworzyłem klasę CircleProgressBar w którym tworzony jest obiekt klasy sf::RenderTexture.
Użyłem tej samej metody co stosowałem do rysowanie zawartości game w pętli głównej tzn. odziedziczyłem klasą CircleProgressBar, klase sf::Drawable i zdefiniowałem funkcje draw.
W funkcji draw w game rysowałem obiekty klasy CircleProgressBar.
Problem jest taki, że kompletnie nie mogę zrobić, żeby RenderTexture przemieszczał się za graczem.
Jako że plików jest dosyć sporo, dlatego zamieszczam link do pobrania paczki z całym kodem.
A tutaj perę screenshotów
Na fioletowo zaznaczyłem sf::RenderTexture, jak widać ucina mi progressBary jak pojazd wyjedzie poza pole.
PS. Ustawienie setCenter dla View RenderTexture nie pomaga.