Bilder verschwinden nach einer gewissen Zeit
-
Hi
Ich habe ein Programm.... Dieses funktioniert einwandfrei (in den ersten 20-30sekunden) Danach verschwinden plötzlich die Bilder... (Nur die Texte welche ich ausgebe sind noch vorhanden) Woran könnte dies liegen?
Hier der Quelltextausschnitt:
while(msg.message != WM_QUIT) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Direct3D.BeginScene(); Direct3D.DrawText("Gismo Kontroll-Center",245,10,D3DCOLOR_XRGB(0,0xFF,100)); Direct3D.navigation(programmpfad+forward[i_foward]+".png",380,130); Direct3D.navigation(programmpfad+backward[i_backward]+".png",380,375); Direct3D.navigation(programmpfad+right[i_right]+".png",570,245); Direct3D.navigation(programmpfad+left[i_left]+".png",150,245); Direct3D.EndScene(); } }
Dies ist die funktion navigation:
bool CDirect3D::navigation(LPCSTR filename, int x, int y) { // Initialisierung LPD3DXSPRITE lpSprite = NULL; LPDIRECT3DDEVICE9 lpD3DDevice = NULL; LPDIRECT3DTEXTURE9 lpSpriteTexture = NULL; // Neue Methode der CDirect3D-Klasse lpD3DDevice = m_lpD3DDevice; // Textur laden, FILE_NAME enthält den Dateinamen D3DXCreateTextureFromFile(lpD3DDevice, filename, &lpSpriteTexture); // Sprite kreiern D3DXCreateSprite(lpD3DDevice,&lpSprite); // Zeichnen des Sprites // Sprite soll nicht skaliert werden D3DXVECTOR2 vScaling(1.0f, 1.0f); // Punkt, um den das Sprite gedreht werden soll D3DXVECTOR2 vRotationCenter(128.0f, 128.0f); // Sprite soll nicht rotiert werden float Rotation = 0.0f; // Sprite soll an Position 250, 250 gezeichnet werden D3DXVECTOR2 vPosition((float)x, (float)y); // Farben der Textur sollen nicht verändert werden D3DCOLOR ModulateColor = 0xFFFFFFFF; // Sprite zeichnen lpSprite->Draw(lpSpriteTexture, NULL, &vScaling, &vRotationCenter, Rotation, &vPosition, ModulateColor); return true; }
sieht jemand einen Fehler oder durch was könnte dies ausgelöst werden?
Habe es bereits auf verschiedenen Rechnern ausprobiert... Fehler kommt immer zwischen 20 und 30 Sekunden....Vielen Dank für die Antworten!
-
Kann es sein, dass du in jedem Frame eine neue Textur erstellst, die du nicht freigibst=
-
Ich mache einfach genau, das, was im 1. Post zu sehen ist...
Wie gebe ich diese dann wieder frei? oder wie verwende ich die gleiche wieder?
-
Machs genauso, wie auch mit Device-Pointer.
Die Textur woanders erstellen und die Pointer als Membervariable in CDirect3D behalten.// Neue Methode der CDirect3D-Klasse lpD3DDevice = m_lpD3DDevice;
Das Kommentar ist übrigens irreführend. Du erstellst nichts neues, und schon gar keine Methode.
Außerdem diese Zuweisung IMHO unnütz, da du weder lpD3DDevice veränderst und in diesem Scope auch zugriff auf m_lpD3DDevice hast.
-
Ich habe das ganze aus einem Beispiel
Aus diesem Grund sind die Kommentare nicht der Hammer!
Wie kann ich den die "Texturen" behalten? Ich erstelle diese ja alle mit der gleichen Funktion...Ein Beispiel wäre nicht schlecht...
Vielen Dank!
-
RTFM
Bye, TGGC (Wähle deine Helden)
-
Da ist das ganze für mich überhaupt nicht verständlich erklährt und es hat in meinem Buch kein Beispiel dazu!
-
Dann heul doch.
Bye, TGGC (Wähle deine Helden)
-
Wer Spieleprogrammieren will, oder allgemein Programme entwickelt, sollte logisch Denken können. Ich glaube das kann man von einem Softwareentwickler erwarten. Du hast von den Leuten hier einen Hinweis auf eine Fehlerquelle bekommen. Der Rest ist deine Arbeit.
cu
-
addict schrieb:
Da ist das ganze für mich überhaupt nicht verständlich erklährt und es hat in meinem Buch kein Beispiel dazu!
wenn dich das ein wenig überfordert, dann lass dir zeit und lern erstmal vernünftig c++, dann wirst du viel schneller probleme wie z.b. "wie allokiere und verwalte ich resourcen richtig" lösen können.
so kommst du später auch mit dem coden klar mit nur der docu und musst dich nicht durch bücher kämpfen.rapso->greets();
-
Ich kann bereits C++ allerdings habe ich mich bis jetzt nur mit MFC-Klassen und QT beschäftigt!
-
Wie kann ich den die "Texturen" behalten? Ich erstelle diese ja alle mit der gleichen Funktion...
wieso kannst du dann einen einfachen zeiger nicht ordentlich verwalten?
rapso->greets();
-
Ich kann Zeiger verwalten hatte aber keine Ahnung wie ich eine Textur anlegen muss!
-