Also das Fenster könntest du z.B. in der Game Klasse kapseln und in der Initialisierungsliste oder mittels sf::RenderWindow::Create erstellen
Dann brauchste auch keine Zeiger, die dich hier nur vor das Problem stellen, den Speicher am Ende wieder freizugeben.
Auch die Sprites könntest du in einer Klasse mit Namen z.B. DrawableObject kapseln, dazu dann noch Sachen wie Positionsangaben usw. .
So hab ich es bei meinem letzten SFML Projekt gemacht.
Ich hoffe das ich "kapseln" richtig interpretier habe aber du meintest damit warscheinlich das ich das Event_Handling und den ganzen quatsch von window in eine Klasse packe.
Also so ungefähr:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#include "Game.hpp"
void CGame::init ()
{
Window.Create(sf::VideoMode(800, 600, 32), "SFML Sample Application");
Sprite.load("Background.bmp");
Sprite.init();
pTestSprite = Sprite.GetSprite();
}
//Unwichtig
void CGame::Event_handling ()
{
while (Window.IsOpen())
{
sf::Event Event;
while (Window.PollEvent(Event))
{
switch (Event.Type)
{
case sf::Event::Closed:
Window.Close();
break;
default:
break;
}
}
Window.Clear(sf::Color(0, 255, 255));
Window.Draw(*pTestSprite); // <----------
Window.Display();
}
}
|
So klappt das ganze zwar aber ich weiß nicht ob das eine all-time-Lösung ist, denn ich werde doch sicherlich später noch mehr mit meinen sf::RenderWindow arbeiten wo ich es nicht in die CGame verschieben kann.
So wie es bei Window.Draw der fall ist das kann ich ja nicht in einer Spriteklasse verpacken weil ich sowohl sf::RenderWindow brauche als auch meinen Sprite (bzw. den dazugehörigen Zeiger).
Debugg einfach mal. Ich wette dein sf::RenderWindow* Window ist eben nicht korrekt initialisiert, zeigt also irgendwohin und nicht auf ein sf::RenderWindow...
Bis jetzt hab ich es mit dem Debugger noch nicht rausgekriegt aba ich werds heute nochmal versuchen, wenn ich den Fehlerteufel ausfindig gemacht hab schreib ich euch das aber ich muss jetzt leider los. Wollte noch schnell den Post fertig machen weil ich gestern nicht konnte.
Fröhliches Arbeiten, Dastan
EDIT: Ich habs, es war so dumm das es schon fast lustig ist.
Für mich aba wohl eher peinlich.
Ich habe die Zuweisung (window = new sf::RenderWin...) erst aufgerufen
nachdem ich den Zeiger übergeben hab.
Trotzdem denke ich das ich doch durch die Antworten einiges an Wissen mitgenommen hab, also bedanke ich mich nochmal bei allen.