DirectX-Forum - Beitragsübersicht -
ThemaDX8: 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 enny
E-Mail robotronik123@freenet.de
Datum 04. März 2009 um 17:50:15
Antwort Noch etwas:

Wenn ich das ganze übrigens im Fenster-Mode laufen lasse, dann funktioniert das Beenden einwandfrei.
Und ich kann die 3D-Tour dann auch immer wieder vom Haupt-programm aus neu straten, beenden, neustarten und so.
Wenn sich das 3D-Fenster (was wie gesagt äußerst selten ist) richtig beendet, und ich die 3D-Tour danach nochmal sterten möchte, kommt beim Initialisieren in der Zeile
Set gD3DDevice8 = gD3D8.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, _
D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp)
Immer ein "Automatisierungsfehler"
Also irgendwas scheint er am Device nicht richtig zu beenden, wenn er dies vom Vollbildmodus aus tut...
[ Antwort schreiben | Zurück zum DirectX-Forum | Forum-Hilfe ]
Antworten
DX8: DirectX lässt sich nicht richtig Beenden - enny 04. März 2009 um 14:06:43
Re: DirectX lässt sich nicht richtig Beenden - Nico 04. März 2009 um 16:26:45
Re: DirectX lässt sich nicht richtig Beenden - enny 04. März 2009 um 17:44:24
Re: DirectX lässt sich... _Nachtrag - enny 04. März 2009 um 17:50:15

Ihre Antwort
(Nick-)Name   Wichtige Informationen zur Namensangabe
E-Mail (opt.)  Wichtige Informationen zur Angabe einer eMail-Adresse
Thema   Wichtige Informationen zur Angabe eines Themas
Betrifft (IDE)  DirectX 8
Ihre Antwort
Smilies
Mehr...
FettKursivUnterstrichen   Übersicht der Tipp-KürzelÜbersicht der Projekt-KürzelÜbersicht der Bücher-Kürzel 
Homepage
Titel
Root-Smilies              
             
             
[ Zurück zum DirectX-Forum | Forum-Archiv | Forum-Hilfe | Chat ]

Zum Seitenanfang

Startseite | VB-/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | Gewinnspiele | VB.Net | .Net-Forum | DirectX | DirectX-Forum | Chat | Ausschreibungen | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 13. Dezember 2015