Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#define Framework CFramework::Get() class CFramework : public TSingleton <CFramework> { public: sf::RenderWindow *GetApp () {return m_pApp;} // Deine anderen Methoden private: sf::RenderWindow *m_pApp; // Deine anderen Eigenschaften }; |
C-/C++-Quelltext |
|
1 |
Framework->GetApp()->//Die jeweilige Funktion |
C-/C++-Quelltext |
|
1 |
void Init (int ScreenWidth, int ScreenHeight, int ColorDepth, std::string sTitle, bool bFullscreen, bool bGetVideoMode); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
void CFramework::Init(int ScreenWidth, int ScreenHeight, int ColorDepth, std::string sTitle, bool bFullscreen, bool bGetVideoMode) { // Speicher für m_pApp reservieren m_pApp = new sf::RenderWindow; // Fenster erzeugen m_pApp->Create(sf::VideoMode(ScreenWidth, ScreenHeight, ColorDepth), sTitle); } |
Du meinst durch delete? Wieso eigentlich eine Init-Funktion, wenn es Konstruktoren gibt? Zudem verwendest du zwei deiner Parameter gar nicht.Zitat von »"raXor"«
// Edit: Nicht vergessen den Speicher freizugeben. Einfach durch Destruktor.
C-/C++-Quelltext |
|
1 2 3 4 |
sf::Vector2f Framework::GetMousePosition() const { return sf::Vector2f(App.GetInput().GetMouseX(), App.GetInput().GetMouseY()); } |
Zitat von »"Nexus"«
Du meinst durch delete?Zitat von »"raXor"«
// Edit: Nicht vergessen den Speicher freizugeben. Einfach durch Destruktor.
Bei einer Singletonklasse verwende ich keine Konstruktoren, weiß auch nicht warum - ist einfach eine Angewohnheit.Zitat
Wieso eigentlich eine Init-Funktion, wenn es Konstruktoren gibt?
Jup, aber man hat die Möglichkeit sie zu verwenden, wenn man sie gleich mit übergibt.Zitat
Zudem verwendest du zwei deiner Parameter gar nicht.
Zitat
Wenn du nur die Mauskoordinaten brauchst, finde ich es übertrieben, das ganze RenderWindow zurückzugeben. Schreib dir doch eine Funktion (Framework ist der Name der anderen Klasse, die das RenderWindow kennt):
Zitat
C-/C++-Quelltext
1 2 3 4 sf::Vector2f Framework::GetMousePosition() const { return sf::Vector2f(App.GetInput().GetMouseX(), App.GetInput().GetMouseY()); }
Auf der anderen Seite muss man aber auch bedenken, dass man dadurch in der Player-Klasse enorm viel Macht erhält (sf::RenderWindow ist ja quasi das Zentralste in SFML). Meiner Ansicht nach zu viel, da schreibt man lieber einzelne Getter.Zitat von »"raXor"«
Zitat
Wenn du nur die Mauskoordinaten brauchst, finde ich es übertrieben, das ganze RenderWindow zurückzugeben. Schreib dir doch eine Funktion (Framework ist der Name der anderen Klasse, die das RenderWindow kennt):
Naja, ich halte es nicht für übertrieben - man kann es schließlich auch für andere Sachen verwenden wodurch man flexibler wäre.
Ich hatte mit Konstruktoren schon hier und da ein paar Probleme. Ich weiß nicht mehr wann und warum, aber irgendwo hatte ich mal, dass sich der Konstruktor einer Singletonklasse mehrmals aufgerufen hat und alles in einer Endlosschleife hing. Ich glaub es war weil im Konstruktor mehrere tiefergelegenen Steuerungsschichten initialisiert wurden und diese dann Singleton::Get aufgerufen haben. (Wurd dann jedes mal neu erstellt) Einfachstes Workaround waren Initmethoden für alles was nicht sofort gemacht werden muss (Pointer auf 0, Referenzen und sowas) oder für kleinere Aufgaben.Zitat von »"Nexus"«
Du meinst durch delete? Wieso eigentlich eine Init-Funktion, wenn es Konstruktoren gibt? Zudem verwendest du zwei deiner Parameter gar nicht.Zitat von »"raXor"«
// Edit: Nicht vergessen den Speicher freizugeben. Einfach durch Destruktor.
Alter Hase
Zitat von »"Nexus"«
Wieso eigentlich eine Init-Funktion, wenn es Konstruktoren gibt?
Werbeanzeige