Seite 1 von 1

Absturz bei OpenScreen wenn minimiert

Verfasst: 16.05.2006 22:02
von Kai
Sobald man in seiner Programmschleife die Drawing Befehle nutzt,
stürzt ja der Screen ab,
ist es nicht möglich zu überprüfen ob der screen minimiert ist und ggf.
dann die drawing Befehle ect. zu unterbrechen.
Weiß jemand Rat? /:->

Beispiel: Stürztz ab :freak:

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf

If OpenScreen(1024, 768, 32, "Sprite")
  Repeat
    ExamineKeyboard()
    FlipBuffers()
    ClearScreen(0)
    
    StartDrawing(ScreenOutput())
     DrawingMode(1)
     DrawText(10,10,"TEST",RGB(255,255,255))
    StopDrawing()
    
    If KeyboardReleased(#PB_Key_Escape)
     End
    EndIf
  ForEver  
Else
  MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0)
EndIf
End

Verfasst: 16.05.2006 22:06
von edel

Code: Alles auswählen

    IF IsScreenActive()
      StartDrawing(ScreenOutput())
      DrawingMode(1)
      DrawText(10,10,"TEST",RGB(255,255,255))
      StopDrawing()
    EndIf
Kenn mich da zwar nicht gut aus , denke aber das es so gemacht wird.

Verfasst: 17.05.2006 10:31
von Kaeru Gaman
yap grundsätzlich sollte IsScreenActive() funktionieren.

allerdings würde ich von riesigen Ifs abraten, das ist immer sehr unübersichtlich.

also, auch dein

Code: Alles auswählen

If OpenScreen(1024, 768, 32, "Sprite") 
würde ich ändern in

Code: Alles auswählen

If OpenScreen(1024, 768, 32, "Sprite") =0
  MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0) 
EndIf

Verfasst: 17.05.2006 11:31
von Kai
Das war doch nurn Beispiel ausser Hilfe, ich mach das so oder so anders. :lol:

Aber, joa danke, werds ma zuhause testen obs geht.

Verfasst: 17.05.2006 16:59
von Kai
Ich glaube nun hab ich aber nen Fehler entdeckt,
oder ich mach wieder etwas falsch.

Das folgende Beispiel zeigt alles:
Solange ich vor der Programmschleife ein Sprite mit PB_Any erstelle,
gibt FlipBuffers() nen Fehler mit InvalidMemory aus.
Mach ich mal wieder was falsch oder is das nen Bug?

Code: Alles auswählen

InitSprite()
InitKeyboard()

If OpenScreen(1024,768,32,"Test minimize") = #False
 MessageRequester("Fehler", "Konnte keinen Screen erstellen.", #MB_OK|#MB_ICONERROR)
EndIf

TestSpriteID = CreateSprite(#PB_Any, 200, 200) ;<-- Auskommentieren dann gehts!

Repeat
 ExamineKeyboard()
 FlipBuffers()
 ClearScreen(0)
 
 If IsScreenActive()

  StartDrawing(ScreenOutput())
   DrawingMode(1)
   DrawText(10, 10, "Test", RGB(255,255,255))  
  StopDrawing()

  If KeyboardReleased(#PB_Key_Escape)
   End
  EndIf
 
 EndIf
ForEver

Verfasst: 28.03.2007 23:12
von ts-soft
Bei mir gibts keinen IMA

Verfasst: 06.04.2007 05:17
von PureLust
@ts-soft: Der IMA kommt, wenn man den Screen minimiert (z.B. durch Alt+Tab) und dann den Screen wiederherstellen will (Klick auf TL).

@Kai: Das mit dem Absturz bei minimiertem bzw. deaktiviertem Screen ist echt ein leidiges Thema. Habe selbst leider auch noch keine 100%ig funktionierende Lösung gefunden.
Ist meiner Meinung nach ein Problem bei PB wie es die Screens handled, aber ist wohl in der Priorität so niedrig, dass es nie gefixed bzw. die Ursache nie näher untersucht wurde. /:->

Verfasst: 06.04.2007 06:50
von THEEX
Mittlerweile funktioniert das Switchen des Screens mit zur Handnahme von Screenactive recht gut. Früher hätte ich es als Buggy bezeichnet, mittlerweile nicht mehr. Man sollte nach Möglichkeit keinen Programmcode ausführen, wenn der Screen nicht active ist, viel mehr brauch man meines Wissens nicht mehr zu beachten.