SFML Modulariesierung
-
Hi Leute
Diesmal hab ich versucht ein wenig Ordnung in mein Programm zu bringen.Ich hatte folgendes vor:
Ich wollte eine Funktion schreiben die ein Bild lädt und dann auf dem Monitor ausgibt.
void Print() { sf::Image i_Bild; sf::Sprite Bild; i_Bild.LoadFromFile("Test.bmp"); Bild.SetImage(i_Bild); App.Draw(Bild); }
Bei dem Aufruf App.Draw (Bild); meckert er wie erwartet da ich das Fenster in Main deklariert habe.
Wie bewerkstellige ich es nun das das Programm an der Stelle nicht mekert?
Ich würde das Fenster Ganz gern weiter in main nutzen.
-
Einfach einen "Zeiger auf dein Fenster" der Funktion Print übergeben.
-
Sowas hatte ich auch mal. Der Funktion übergeben oder global deklarieren, je nach Präferenz, oder eine Klasse erstellen, die ein static element app hat und print als memberfunktion. Letztes natürlich nur wenn es designmäßig sinnvoll ist und du noch andere funktionen außer print hast die in den Kontext reinpassen.
Wieder andere möglichkeit ist, der Klasse von App eine Memberfunktion hinzuzufügen, die das Bild zeichnet, sofern App nicht eine sfml Klasse ist; falls sie das ist, u.U. von der Klasse ableiten und eigene Zusatzfunktionen definieren.
-
hm er zeigt mir an das er den Typ nicht convertieren kann habe (int *Ziel) als Parameter und in main dann (&App)beim aufruf eingefügt. aber scheind noch nciht zu funktionieren. die funktion ist Sf::RenderWindow
-
Saibot1988 schrieb:
hm er zeigt mir an das er den Typ nicht convertieren kann habe (int *Ziel) als Parameter und in main dann (&App)beim aufruf eingefügt. aber scheind noch nciht zu funktionieren. die funktion ist Sf::RenderWindow
ja du musst auch ein sf::RenderWindow übergeben und kein int. das soll heißen,
void Print(&App); void Print(sf::RenderWindow *Ziel) { //Code Ziel->Draw(Grafik); }
-
Ah okay danke jetzt hab ich das verstanden. danke schön