|
DirectX-Forum - Beitragsübersicht - |
|
Thema | DX8: DirectX lässt sich nicht richtig Beenden |
Von |
enny |
E-Mail |
robotronik123@freenet.de |
Datum |
04. März 2009 um 14:06:43 |
Frage |
Hallo Leute,
ich habe folgendes Problem: Ich lasse mein 3D Proggi im Vollbildmodus laufen. Die Variable run unterbricht die Hauptschleife in der alles notwendige für das 3D abgearbeitet wird.
Die Variable run setze ich nun auf False wenn Direct Input die Escape-Taste erkennt. Danach führe ich ein Unload aller Komponenten durch, Speicherbereinigung etc. und mach noch ein unload des Formulars. Jedoch bleibt bei mir dann das zuletzt gerenderte Bild einfach auf dem Bildschirm stehen, statt zu verschwinden.
Ich muss dazu sagen: Es handelt sich um ein normales VB Programm mit fenstern und so. Und da gibts dann einen Button mit dem man eine "3D-Tour" startetn kann. Diese wird dann im Vollbildmodus angezeigt, und soll halt durch Escape abgebrochen werden können. Und nach dem Abbruch soll der rest des Programmes normal weiter betrieben werden können.
Hier mal ein Auszug aus der Main-Schleife: Do frametime = (Timer * 1000) KAMERA.TurnHor = 0# KAMERA.TurnVer = 0# KAMERA.Move = MOVE_NONE 'prüfen auf Anwender-Eingabe DIModule.CheckInput DIModule.CheckMouse set_bot_position Form1.curr_x_mm / 10, Form1.curr_y_mm / 10, Form1.winkel 'Umsetzung der Bewegung mit der Maus: (x=Hoch/runter; y=links/rechts) With KAMERA 'y-Achse rotieren If .TurnHor <> 0 Then .AngleY = .AngleY + (.TurnHor / 5) .Move = .Move Or MOVE_TURN If .AngleY < 0 Then .AngleY = 360 + .AngleY ElseIf .AngleY > 360 Then .AngleY = .AngleY - 360 End If End If 'x-Achse rotieren If .TurnVer <> 0 Then .AngleX = .AngleX + (.TurnVer / 10) If .AngleX > 90 Then .AngleX = 90 If .AngleX < -70 Then .AngleX = -70 .Move = .Move Or MOVE_TURN End If End With 'hat sich der Spieler überhaupt bewegt ? If KAMERA.Move <> MOVE_NONE Then 'neue Spielerposition berechnen CalculateViewStartPos 'Matrix-Ursprung auf Spielerposition setzen TranslateMatrix myTranslateMatrix, vec3(KAMERA.X * -1, KAMERA.z * -1, KAMERA.Y * -1) 'Matrix Y-Rotation RotateYMatrix myYMatrix, KAMERA.AngleY * PI / 180 'Matrix X-Rotation RotateXMatrix myXMatrix, KAMERA.AngleX * PI / 180 'Matrizen zusammenführen myNewMatrix = RetMatrixMult(myTranslateMatrix, myYMatrix) View3DMatrix = RetMatrixMult(myNewMatrix, myXMatrix) 'Transformation der ViewPortMatrix durchführen gD3DDevice8.SetTransform D3DTS_VIEW, View3DMatrix End If DoEvents '3D Szene rendern Render3D DoEvents frame_cnt = frame_cnt + 1 If frame_cnt > 10 Then framerate = Round(1000 / ((Timer * 1000) - frametime), 1) frame_cnt = 0 End If Loop While running Form2.temperatur_timer.Enabled = False Form2.akkuspannung_timer.Enabled = False 'Windows-Mauszeiger einblenden Call gD3DDevice8.ShowCursor(True) 'Speicher bereinigen TerminateTexture TerminateDInput TerminateDX Unload Form3D End Sub Noch zur Info: Ab und zu funktioniert es so wie ich das gern möchte, dass sich das ganze schließt. Aber leider nur ab und zu, um nicht zu sagen eher selten....
Hoffe mir kann jemand weiter helfen und sagen wo der Fehler liegt bzw. liegen könnte. Wenn andere Quellcode-Bereiche zur Lösungsfindung wichtig sind, dann sagt einfach was ihr braucht, kanns euch alles noch schicken. |
|
Antwort: |
Von |
Nico |
E-Mail |
nico.schertler@gmx.de |
Datum |
04. März 2009 um 16:26:45 |
Antwort |
Hallo!
In den Prozeduren TerminateTexture usw. ist auch der richtige Code? Normalerweise sollte der Vollbildmodus mit zerstören des Devices verlassen werden. Wenn da ein Unload nicht funktioniert, probiers mal mitSet gD3DDevice8 = Nothing Nico |
|
[ Antwort schreiben | Zurück zum DirectX-Forum | Forum-Hilfe ] |
|
Letzte Aktualisierung: Sonntag, 13. Dezember 2015 |
|