Jakobez Temat założony przez niniejszego użytkownika |
[C++/SFML 2.1/SFGUI] Operacje klas na innych klasach » 2014-06-09 20:46:33 Witam , potrzebuję porad/wskazówek co do mojego projektu i czy w ogóle jest to możliwe . W czym jest problem? A więc chcę zrobić klasy które będą robić operacje w oparciu o główną , w moim wypadku mam klasę WindowManage , będzie ona miała dostęp do czyszczenia okna , renderowania grafiki itd. class WindowManage { sf::RenderWindow okno; sfg::Desktop desktop; void Run(); void WyczyscOkno(); }
Druga klasa to klasa Menu < jak sama nazwa wskazuje będzie ona zarządzać menu tzn. operować funkcjami menu (opcje , nowa gra , wczytywanie , exit) . Trzecia klasa będzie odpowiadać za mechanikę gry , kolizje itd. Main cpp int main() { WindowManage window; window.run(); Menu menu; menu.uruchom(); return 0; }
Dochodząc do sedna : Czy jak dodam friend windowmanage do klasy menu to moge w funkcji klasowej menu uzyc zmiennej app_window ? jesli tak , to jak? I pytanie : Jak Udostępnić te zmienne w innych klasach? , używać zaprzyjaźnionych klas czy dziedziczyć . I jak używać zmiennych innych klas w funkcjach klasowych bez inicjacji ich w klasie , , jest to możliwe? ... Wszystko ma wspolgrać ze sobą , w main.cpp chce tylko wywołać klasę która uruchomii okno i pokaże menu , reszta będzie na button signalach(po wcisnicieciu tego przycisku załącza się funkcja tej klasy). Dziękuję . |
|
pekfos |
» 2014-06-09 21:56:40 Czy jak dodam friend windowmanage do klasy menu to moge w funkcji klasowej menu uzyc zmiennej app_window ? jesli tak , to jak? |
To tak nie działa. Jak Udostępnić te zmienne w innych klasach? , używać zaprzyjaźnionych klas czy dziedziczyć . |
W zależności od konkretnego przypadku.. I jak używać zmiennych innych klas w funkcjach klasowych bez inicjacji ich w klasie , , jest to możliwe? ... |
Jeśli chodzi o składowe niestatyczne, musisz mieć dostęp do konkretnego obiektu. w main.cpp chce tylko wywołać klasę która uruchomii okno i pokaże menu |
window.run(); Menu menu; menu.uruchom();
|
Znaczy, że Run() zawiera pętlę główną programu? Chyba widać, jak to się skończy. |
|
Jakobez Temat założony przez niniejszego użytkownika |
» 2014-06-09 22:01:48 Głównie mi chodzi o to by udostępnić z managewindow zmienną desktop do wszystkich klas , i by te klasy mogły wklejać do m_desktop swoje widgety .
Co do ostatniego - chodzilo o to - window.run() uruchamia puste okno i wlasnie ten desktop , a juz menu.uruchom(); wkleja przyciski menu do desktopa. Po prostu chcę użyć cos takiego desktop.add(widget);
//edit
Run() zawiera pętlę główną gdzie jest cos takiego -> desktop.HandleEvent(event); , bez tego widgety nie zadziałają .
Inne funkcje mają wklejać tylko widgety do tego desktopa , caly problem. |
|
pekfos |
» 2014-06-09 22:06:48 W klasach, gdzie będzie to potrzebne, wstaw referencję na WindowManage, a do WindowManage dodaj metodę wystawiającą ten dekstop. chodzilo o to - window.run() uruchamia puste okno w ktorym jest render window i wlasnie ten desktop |
A mi chodziło o to, że nic z menu nie zadziała, bo Run() zablokuje dalsze wykonywanie. Zakładając, że tam umieścisz pętlę główną, jak to wynika z komentarzy. |
|
Jakobez Temat założony przez niniejszego użytkownika |
» 2014-06-09 23:07:42 Mam pytanie - po co mi ta metoda wystawiajaca desktop? Desktop inicjuje sie tylko raz w petli głównej i mozna z niego korzystac caly czas(jest niewidzialny) dodając na niego widgety i usuwając je z niego .Inicjuje go wraz z oknem.
Chce miec tylko do niego dostep z innych klas i do render window
Dziękuję za pomoc , juz wiem , zamykam. |
|
« 1 » |