Wenn man in einem Programm in dem Sprites verwendet werden [Alt]+[Tab] verwendet und anschließend wieder zum Spiel/Programm zurückkehrt sind alle Grafiken weg und durch irgendein Hickhack ersetzt.
Wie kann ich es realisieren, dass beim Zurückgehen zum Spiel wieder/noch alle Grafiken da sind??
Es würde mich wenn man diese Frage schonmal irgendwo im Board findet, aber mir sind leider einfach keine treffenden Suchbegriffe eingefallen.
Sprites nach Wechsel auf den Desktop
- blbltheworm
- Beiträge: 217
- Registriert: 22.09.2004 19:36
- Wohnort: Auf der schönen Schwäbischen Alb
- NicTheQuick
- Ein Admin
- Beiträge: 8812
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Das ist sogar ein muss. Der Grafikspeicher wird gelöscht, wenn ein Screen wieder beendet wird. Da man ja beim Wechsel zum Desktop in einen anderen Bildschirmmodus wechselt, kann der DirectX-Screen auch nicht mehr im Hintergrund da sein. Er wird also beendet und alle Daten werden wieder gelöscht. Es kann auch sein, dass mal ein Sprite noch funktioniert, aber das nur, weil es noch nicht überschrieben wurde.
Soviel ich weiß steht auch ein Hinweis in der Hilfe dazu. Es gibt auch noch den Befehl [c]IsScreenActive()[/c] oder so ähnlich, mit dem man feststellen kann, ob man zum Desktop gewechselt hat oder nicht. Wenn es der Fall war muss man natürlich alle Sprites wieder neu laden und nicht zu vergessen die Maus wieder freigeben, solange der Screen nicht aktiv ist.
Soviel ich weiß steht auch ein Hinweis in der Hilfe dazu. Es gibt auch noch den Befehl [c]IsScreenActive()[/c] oder so ähnlich, mit dem man feststellen kann, ob man zum Desktop gewechselt hat oder nicht. Wenn es der Fall war muss man natürlich alle Sprites wieder neu laden und nicht zu vergessen die Maus wieder freigeben, solange der Screen nicht aktiv ist.
- blbltheworm
- Beiträge: 217
- Registriert: 22.09.2004 19:36
- Wohnort: Auf der schönen Schwäbischen Alb
Also ich hab jetzt das laden aller Grafiken in eine Funktion nahmens LoadGFX() gestopt.
Die Folgende Funktion wird nun jedesmal vor dem Zeichnen des Screens aufgerufen:
Jedoch, wenn ich einmal auf dem Desktop bin komm ich nicht mehr zum Programm zurück.
Was mach ich falsch??
Die Folgende Funktion wird nun jedesmal vor dem Zeichnen des Screens aufgerufen:
Code: Alles auswählen
Procedure chkOnScreen()
If IsScreenActive()=0
While IsScreenActive()=0
Delay(1)
Wend
LoadGFX()
EndIf
EndProcedure
Was mach ich falsch??
Das gleiche aus meinem Spiel:
Du musst in deiner Schleife ein Flipbuffers() haben und nach der Schleife musste ich bei mir noch ein Delay() und ein Flipbuffers() einbauen da sonst die Sprites nicht richtig geladen wurden.
Code: Alles auswählen
If IsScreenActive() = 0;{
Repeat
Delay(100)
FlipBuffers()
Until IsScreenActive()
Delay(50)
FlipBuffers()
LoadSprites(#True)
EndIf;}
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
- blbltheworm
- Beiträge: 217
- Registriert: 22.09.2004 19:36
- Wohnort: Auf der schönen Schwäbischen Alb
Dankeschön, jetzt funktionierts.
Ich hab die Funktion noch ein bischen überarbeitet, dass er nicht kurzzeitig noch den aktuellen Bildschirm und den Rahmen des Fensters anzeigt:
Ich hab die Funktion noch ein bischen überarbeitet, dass er nicht kurzzeitig noch den aktuellen Bildschirm und den Rahmen des Fensters anzeigt:
Code: Alles auswählen
Procedure chkOnScreen()
If IsScreenActive()=0
Repeat
Delay(100)
FlipBuffers()
Until IsScreenActive()
Delay(50)
FlipBuffers()
StartDrawing(ScreenOutput())
Box(0,0,800,600,0)
StopDrawing()
FlipBuffers()
LoadGFX()
EndIf
EndProcedure