FlipBuffers() bleibt manchmal minutenlang hängen
Dies ist doch nur ein möglichst einfaches Beispiel, welches demonstrieren soll, dass FlipBuffers() manchmal hängt.
Den WindowedScreen brauche ich in meinem eigentlichen Programm, weil dort jede Menge Sprites angezeigt werden und zwar abhängig von verschiedenen User-Eingaben.
Für meine Zwecke ist der WindowedScreen am geeignetsten, weil ich darauf ausserdem via Assembler direkte Manipulationen in Echtzeit vornehmen kann.
Den WindowedScreen brauche ich in meinem eigentlichen Programm, weil dort jede Menge Sprites angezeigt werden und zwar abhängig von verschiedenen User-Eingaben.
Für meine Zwecke ist der WindowedScreen am geeignetsten, weil ich darauf ausserdem via Assembler direkte Manipulationen in Echtzeit vornehmen kann.
Gruß
Markus
Markus
Das wäre mein Ansatz:
Code: Alles auswählen
InitSprite()
Breite=300 : Hoehe=200
OpenWindow(0,0,0,Breite,Hoehe,"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,Breite,Hoehe,0,0,0)
AddKeyboardShortcut(0,#PB_Shortcut_Escape,#PB_Shortcut_Escape)
ESC_check = #False
Repeat :
ClearScreen(#Black)
Event=WaitWindowEvent(10)
If Event=#PB_Event_Menu
Taste=EventMenu()
Select Taste
Case #PB_Shortcut_Escape
ESC_check = #True
;case andere taste_1
; ESC_check = #False
; mach dies
;case andere taste_2
; ESC_check = #False
; mach das
;case andere taste_3
; ESC_check = #False
; mach jenes
;
;usw
;und so fort
EndSelect
EndIf
If ESC_Check
StartDrawing(ScreenOutput())
DrawText(10,10,"Esc gedrückt")
StopDrawing()
EndIf
FlipBuffers()
Until Event=#PB_Event_CloseWindow Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Das Einzige was ich in der Doku finde ist:
Von if-Blöcken steht da nichts, wäre mir auch neu.
Code: Alles auswählen
Der FlipBuffers() Befehl muss stets außerhalb eines StartDrawing() : ... : StopDrawing() Programmblocks aufgerufen werden.
Zuletzt geändert von Gimbly am 30.03.2008 20:46, insgesamt 2-mal geändert.
Gruß
Markus
Markus
Ich meinte den andern Kram mit der Bild-Synchronisation.
Sprites werden meist in jedem Repeat-Durchlauf neu gezeichnet, weil sie sich oft bewegen - sonst könnte man ja Images im Fenster nehmen - oder man sonstwas mit ihnen oder ihrem Hintergrund anstellt.
Damit neu gezeichnet wird, brauchts Flipbuffers().
Oder so ähnlich
Mangels tiefergehender Infos zu dem, was bei Dir ablaufen soll, tu ich mich schwer, mehr zu erklären zu versuchen.....
...und die nächste Stunde muß ich vonne Kiste wech und Spülen...
Sprites werden meist in jedem Repeat-Durchlauf neu gezeichnet, weil sie sich oft bewegen - sonst könnte man ja Images im Fenster nehmen - oder man sonstwas mit ihnen oder ihrem Hintergrund anstellt.
Damit neu gezeichnet wird, brauchts Flipbuffers().
Oder so ähnlich
Mangels tiefergehender Infos zu dem, was bei Dir ablaufen soll, tu ich mich schwer, mehr zu erklären zu versuchen.....
...und die nächste Stunde muß ich vonne Kiste wech und Spülen...
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
seit 17.12.08: PB 4.3 unter XP Home(SP3)
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
nein, das kann nur daran liegen, dass du das flippen nur dann durchführst, wenn eine bestimmte aktion erfolgte.
auf einen screen wird in den backbuffer gezeichnet, und mit flipbuffers wird es dargestellt.
das bedeutet, dass du das neu gezeichnete erst dann zu sehen bekommst, wenn du die buffer flipst.
wenn dein flip in ner bedingung steht, die nur alle halbe stunde erfüllt ist,
dann siehst du auch nur alle halbe stunde den neu gezeichneten buffer.
das ist schlicht logisch und absolut immanent, deswegen steht das nicht in der help.
auf einen screen wird in den backbuffer gezeichnet, und mit flipbuffers wird es dargestellt.
das bedeutet, dass du das neu gezeichnete erst dann zu sehen bekommst, wenn du die buffer flipst.
wenn dein flip in ner bedingung steht, die nur alle halbe stunde erfüllt ist,
dann siehst du auch nur alle halbe stunde den neu gezeichneten buffer.
das ist schlicht logisch und absolut immanent, deswegen steht das nicht in der help.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
@Kaeru Gaman: das ist natürlich vollkommen klar und logisch. Ich hätte vielleicht am Anfang schreiben sollen, dass ich kein blutiger PB-Anfänger bin.
In meinem Programm wird auch nach jeder Grafikmanipulation geflippt, aber wenn sich auf dem Schirm nichts ändert, weil der User eine Pause macht, wird bei mir auch nicht geflippt, weil das Bild sich ja nicht geändert hat.
Langsam glaube ich, dass genau das der Knackpunkt ist, dass nämlich längere Zeit gar nichts auf dem Screen passiert und er einpennt.
In meinem Programm wird auch nach jeder Grafikmanipulation geflippt, aber wenn sich auf dem Schirm nichts ändert, weil der User eine Pause macht, wird bei mir auch nicht geflippt, weil das Bild sich ja nicht geändert hat.
Langsam glaube ich, dass genau das der Knackpunkt ist, dass nämlich längere Zeit gar nichts auf dem Screen passiert und er einpennt.
Zuletzt geändert von Gimbly am 30.03.2008 21:30, insgesamt 2-mal geändert.
Gruß
Markus
Markus