Seite 1 von 1

Sprites nach Wechsel auf den Desktop

Verfasst: 09.11.2004 21:56
von blbltheworm
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.

Verfasst: 09.11.2004 22:05
von Ynnus
Du musst die Sprites nochmals per Loadsprite() in den Speicher laden. Sobald man den Screen verlässt und sich anderen Dingen widmet, wird der Speicher scheinbar verworfen oder vermischt. Sollte durch ein erneutes Einladen der Sprites zu beheben sein.

Verfasst: 09.11.2004 23:57
von NicTheQuick
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.

Verfasst: 10.11.2004 19:27
von blbltheworm
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:

Code: Alles auswählen

Procedure chkOnScreen()
 If IsScreenActive()=0 
   While IsScreenActive()=0
    Delay(1)
   Wend
   LoadGFX()
 EndIf 
EndProcedure
Jedoch, wenn ich einmal auf dem Desktop bin komm ich nicht mehr zum Programm zurück.
Was mach ich falsch??

Verfasst: 10.11.2004 20:48
von Deeem2031
Das gleiche aus meinem Spiel:

Code: Alles auswählen

If IsScreenActive() = 0;{
  Repeat
    Delay(100)
    FlipBuffers()
  Until IsScreenActive()
  
  Delay(50)
  FlipBuffers()
  LoadSprites(#True)
EndIf;}
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.

Verfasst: 10.11.2004 22:43
von blbltheworm
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:

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