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
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
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.
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.