Du bist nicht angemeldet.

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

killmichnich

unregistriert

1

19.01.2010, 20:49

Problem beim löschen eines Sprite

Hiho liebe Leute,

ich hab folgendes Problem: Ich erzeuge an zwei verschiedenen Stellen in meinem Quellcode ein Sprite und lösche es direkt danach wieder. Probelm dabei ist: wenn ich es an der einen Stelle lösche, klappt alles wunderbar, an der anderen jedoch hängt sich das Programm auf und muss beendet.
Da ich das jetzt sehr seltsam finde und auch keine Ahnung habe woran das liegen kann wollt ich einfach mal bei euch nachfragen woran das liegen kann.
Die zwei Stellen, wo ich die Sprites erstelle bzw. lösche sind die folgenden:
Mein Spiel hat eine Klasse GameState von der verschiedene Klassen erben, wie z.B. Menü oder "MainGame"(also das eigentliche Spiel). Diese Gamestates werden von der Klasse Game verwaltet.
Wenn ich nun dieses Sprite in der Klasse Game erstelle und lösche, klappt alles wunderbar. Lösche ich es jedoch in einer der Klassen die von GameState erben, so muss das Programm beendet werden.
Ich habe wirklich keine Ahnung woran das liegen kann.

Ich weiß nicht ob es hilfreich is, aber ich lad einfach mal den Quellcode hoch, dass man ihn bei Bedarf runterladen kann: http://daniel92.blogdns.com/
Die Klassen Game/Gamestate etc. sind in Game/... zu finden, die Klasse Sprite ist unter MyEngine/... .
Ich hab jetzt als Beispiel mal in Game.cpp und in MainGame.cpp den folgenden Code eingefügt:

C-/C++-Quelltext

1
2
CSprite* s = new CSprite(MyEngine->GetResManager()->GetTexture("stardestroyer"));
    delete s;

Damit wird eigtl. nur ein Sprite erzeugt und gelöscht, is ja eigtl. ganz einfach. Nur eben funzts in MainGame.cpp nich wenn ichs so ausführ.
Der Aufruf ist jeweils in der Methode Init() der Klassen zu finden.

Naja ich hoff ich habs genau genug beschrieben und auch, dass es ne ganz einfache Lösung dafür gibt =/

MfG Killmichnich

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

19.01.2010, 21:13

warum lädst du das sprite wenn du es danch gleich wieder löschst?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

killmichnich

unregistriert

3

19.01.2010, 21:18

es is einfach nur n test, das ganze hab ich iwann mal festgestellt, dass was nich klappt ... iwann bin ich da dann drauf gekommen, es is ja auch so wenn ich das sprite iwann während dem spielverlauf löschen will, dass es sich aufhängt.

idontknow

unregistriert

4

19.01.2010, 21:34

Destruktor?

killmichnich

unregistriert

5

19.01.2010, 21:52

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
CSprite::~CSprite()
{
    if(S_Sprite)
    {
        S_Sprite->Release();
    }
    Direct3D    = NULL;
    ResManager  = NULL;
}

da sollte ja eigentlich nich viel schief gehen können ...oder? xD

EDIT: boar lol ich hab den fehler gefunden ... aber das is so peinlich, dass ichs garnich sagen will :oops:
Direct3D und ResManager sind static ... ich glaub das sagt alles oder =/

also ich glaub der thread hier kann geschlossen werden ... ^^

idontknow

unregistriert

6

19.01.2010, 22:17

Zitat von »"killmichnich"«

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
CSprite::~CSprite()
{
    if(S_Sprite)
    {
        S_Sprite->Release();
    }
    Direct3D    = NULL;
    ResManager  = NULL;
}

da sollte ja eigentlich nich viel schief gehen können ...oder? xD

EDIT: boar lol ich hab den fehler gefunden ... aber das is so peinlich, dass ichs garnich sagen will :oops:
Direct3D und ResManager sind static ... ich glaub das sagt alles oder =/

also ich glaub der thread hier kann geschlossen werden ... ^^


:)

Werbeanzeige