Bildschirmflackern ???

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
crossroads
Beiträge: 244
Registriert: 29.08.2004 05:41
Wohnort: Rhine Main Area

Beitrag von crossroads »

Fast gleich ist schlecht. Auf daß es manche Programmierer doch noch verstehen mögen, hier zwei Beispiele - erstes mit FlipBuffers() am Ende, zweites am Anfang:

Code: Alles auswählen

If InitKeyboard() And InitSprite()
  If OpenScreen(800, 600, 32, "Test 1")
    For i = 1 To 3
      If i <> 3:text$ = "Warte auf " + Str(i) + ". Tastendruck": Else:text$ = "Warte auf " +  "letzten Tastendruck":EndIf
      ClearScreen(0, 0, 0)
      StartDrawing(ScreenOutput())
      DrawingMode(1)
      FrontColor(255, 255, 255)
      Locate(10, 10)
      DrawText(text$)
      StopDrawing()
      FlipBuffers()
      
      Repeat:ExamineKeyboard():Delay(10):Until KeyboardPushed(#PB_Key_All):Delay(500)
    Next i
  EndIf
EndIf

Code: Alles auswählen

If InitKeyboard() And InitSprite()
  If OpenScreen(800, 600, 32, "Test 2")
    For i = 1 To 3
      If i <> 3:text$ = "Warte auf " + Str(i) + ". Tastendruck": Else:text$ = "Warte auf " +  "letzten Tastendruck":EndIf
      FlipBuffers()
      ClearScreen(0, 0, 0)
      StartDrawing(ScreenOutput())
      DrawingMode(1)
      FrontColor(255, 255, 255)
      Locate(10, 10)
      DrawText(text$)
      StopDrawing()
      
      Repeat:ExamineKeyboard():Delay(10):Until KeyboardPushed(#PB_Key_All):Delay(500)
    Next i
  EndIf
EndIf
Spaßhalber einfach mal ausprobieren (einfach dreimal hintereinander beliebige Taste drücken) :D
Man soll die Tür aufmachen, bevor man durchgeht ...
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Ja, aber es nur dann nicht egal, wenn man so sparsam wie du
damit umgeht. Bei Spielen, wo es jeden Programmduchlauf gemacht wird, ist es ziemlich egal.
Benutzeravatar
crossroads
Beiträge: 244
Registriert: 29.08.2004 05:41
Wohnort: Rhine Main Area

Beitrag von crossroads »

Macros hat geschrieben:Ja, aber es nur dann nicht egal, wenn man so sparsam wie du
damit umgeht. Bei Spielen, wo es jeden Programmduchlauf gemacht wird, ist es ziemlich egal.
Sollte auch nur zur Verdeutlichung dienen, um was es mir überhaupt geht.
Ich finde, es gehört einfach zu einem sauberen Programmierstil.

Es gibt ja auch Programme, die immer eine einzige Procedure zum Aktualisieren aufrufen; und auch nur dann, wenn es etwas zu aktualisieren gibt. Vielleicht passiert das nur alle paar Sekunden oder gar Minuten. Mit einem FlipBuffers() am Anfang der Procedure bekommt man dann eben nur einen alten Bufferinhalt auf den Schirm.
Da wir hier im Anfängerforum sind, sollten wir doch alles so korrekt wie möglich erklären, oder? :D
Man soll die Tür aufmachen, bevor man durchgeht ...
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Also ich hab den code von Crossroads getestet (den den er ganz am anfang gepostet hat) und der ging bei mir nicht. Ich hab ihn mal umgeschrieben und der hier geht bei mir ohne flimmern:

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

;- Bildschirmeinstellungen
OpenScreen(800, 600, 32, "Test")
ClearScreen(0,0,0)

#Speed = 0
;- Initsialisierung
LoadFont (0, "Courier New", 40,#PB_Font_Bold)           
LoadFont (1, "Courier New", 14,#PB_Font_Bold)

;-Start
Gosub Startbildschirm


;-Tastatur
Repeat
  ExamineKeyboard()
 
  If KeyboardPushed(#PB_Key_F10): Gosub Balken: EndIf
 
Until KeyboardPushed(#PB_Key_Escape) 
End   
;--------------------------------------------------------------------------------------------------------------------------

;- Balken
Balken:
; FlipBuffers()
ClearScreen(0,0,0)
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(0, 0, 0):     Box (3,3,793,593)
FrontColor(255,255,255): Box (97,97,606,106)
FrontColor(0,0,0):       Box (100,100,600,100)

FrontColor(0,255,0):     
DrawingFont(UseFont(1))
Locate (120,220):        DrawText("Speed % = 000")
Locate (170,500):        DrawText("ESC = Zurück")
Locate (170,300):        DrawText("F3 = -")
Locate (170,330):        DrawText("F4 = +")
StopDrawing()
FlipBuffers()

Repeat
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_F3): Gosub Minus:  EndIf
  If KeyboardPushed(#PB_Key_F4): Gosub Plus:   EndIf
Until KeyboardPushed(#PB_Key_Escape)                       
Return

;- Minus
Minus:
speed = speed - 1
If speed <1 : speed = 1: EndIf
l = speed * 6
Gosub Anzeige
Return

;- Plus
Plus:
speed = speed +1
If speed >100 : speed = 100: EndIf
l = speed * 6
Gosub Anzeige
Return

;- Anzeige
Anzeige:
; FlipBuffers()
ClearScreen(0,0,0)
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(0, 0, 0):     Box (3,3,793,593)
FrontColor(255,255,255): Box (97,97,606,106)
FrontColor(0,0,0):       Box (100,100,600,100)

FrontColor(0,255,0):     
DrawingFont(UseFont(1))
Locate (120,220):        DrawText("Speed % = 000")
Locate (170,500):        DrawText("ESC = Zurück")
Locate (170,300):        DrawText("F3 = -")
Locate (170,330):        DrawText("F4 = +")
FrontColor(0,0,0):   Box (100,100,600,100)
Box (120,220,200,20)

FrontColor(0,0,255): Box (100,100,l,100)
FrontColor(0,255,0):     
DrawingMode(1)
DrawingFont(UseFont(1))
Locate (120,220):        DrawText("Speed % = "+Str(speed))
StopDrawing()
FlipBuffers()
Return

;- Startbildschirm
Startbildschirm:
StartDrawing(ScreenOutput())
DrawingMode(1):DrawingFont(UseFont(0))

FrontColor(90, 0, 255): Box (0,0,799,599)
FrontColor(0, 0, 0):    Box (3,3,793,593)

FrontColor(90, 0, 255)
Locate (170,180)
DrawText("Hauptbildschirm")

DrawingFont(UseFont(1))
Locate (170,250):       DrawText("F10 = Speed")
Locate (170,280):       DrawText("ESC = Zurück")
StopDrawing()
FlipBuffers()
Return

End
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Fairman68
Beiträge: 12
Registriert: 06.01.2006 20:00
Wohnort: Weiden i. d. Opf.

Beitrag von Fairman68 »

Hallo, ich habe das problem gelöst :D
Besten dank an alle, und ein besonderes dankeschön an Batze, wenn mir das gleich einer erklärt hätte das mit der Tafel. Ich verwende inzwischen auch proceduren ( dankeschön an Konne), ihr seit echt spitze. nochmals vielen vielen dank. Ich hoffe ich bin mal soweit das ich auch bald jemanden so helfen kann wie ihr alle :allright:
Antworten