Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++/SFML 2.1/SFGUI] Operacje klas na innych klasach

Ostatnio zmodyfikowano 2014-06-09 23:07
Autor Wiadomość
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.
C/C++
class WindowManage
{
    sf::RenderWindow okno;
    sfg::Desktop desktop; // taka "tablica" na widgety .
    void Run(); // funkcja która uruchomi okno i główną pętle
    void WyczyscOkno(); // funkcja która czyści okno z widgetow i grafiki
    //itd.
   
}
 
 Druga klasa to klasa Menu < jak sama nazwa wskazuje będzie ona zarządzać menu tzn. operować funkcjami menu (opcje , nowa gra , wczytywanie , exit) .

C/C++
class Menu
{
    // w tej klasie będę umieszczać wskaźniki widgetów , które będą umieszczane na WindowManage (desktop);
    // dodatkowo umieszczę tutaj zmienne potrzebne do stworzenia postaci , przechowywania opcji itd.
}

 Trzecia klasa będzie odpowiadać za mechanikę gry , kolizje itd.
C/C++
class mechanika
{
    //widgety pokazujące invetory ,staty , itd. Zostaną także umieszczone na desktopie.
    //kolizja
    //poruszanie
}
Main cpp
C/C++
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ę .


P-111840
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
C/C++
void Run(); // funkcja która uruchomi okno i główną pętle
C/C++
window.run();
Menu menu;
menu.uruchom();
Znaczy, że Run() zawiera pętlę główną programu? Chyba widać, jak to się skończy.
P-111851
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.
P-111852
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.
P-111854
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.
P-111869
« 1 »
  Strona 1 z 1