FlipBuffers() bleibt manchmal minutenlang hängen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

Beitrag von Gimbly »

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.
Gruß
Markus
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

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)
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

Beitrag von Gimbly »

Danke für dein Beispiel scholly! Werde es gleich testen.

Gibt es einen generellen Grund, FlipBuffers() nicht in einem if-Block zu verwenden?
Gruß
Markus
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Lies Dir die Doku dazu bitte nochmal selber durch - ich bin manchmal zu schlecht im erklären :oops:
Und wenn Du weitere Besispiele brauchst, hier gibts genug, die kein Problem mit Flipbuffers() haben, einfach danach suchen :lol: :lol:
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

Beitrag von Gimbly »

Das Einzige was ich in der Doku finde ist:

Code: Alles auswählen

Der FlipBuffers() Befehl muss stets außerhalb eines StartDrawing() : ... : StopDrawing() Programmblocks aufgerufen werden.
Von if-Blöcken steht da nichts, wäre mir auch neu.
Zuletzt geändert von Gimbly am 30.03.2008 20:46, insgesamt 2-mal geändert.
Gruß
Markus
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

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 :lol: :lol:

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)
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

Beitrag von Gimbly »

Da kommt mir eine Idee: Kann das Problem vielleicht darin begründet liegen, dass, wenn längere Zeit nicht auf den WindowedScreen zugegriffen wird, dieser quasi "einschläft"?
Gruß
Markus
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Riacon
Beiträge: 61
Registriert: 21.01.2008 09:40

Beitrag von Riacon »

hab jetzt schon einen wunden daumen. bei mir funktioniert dein beispiel tadellos.
hängt es denn bei dir mit allen programmen oder nur mit einem bestimmten?
pb 4.51 win7 64
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

Beitrag von Gimbly »

@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.
Zuletzt geändert von Gimbly am 30.03.2008 21:30, insgesamt 2-mal geändert.
Gruß
Markus
Antworten