Seite 3 von 3

Verfasst: 15.01.2006 18:48
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

Verfasst: 15.01.2006 18:54
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.

Verfasst: 15.01.2006 19:09
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

Verfasst: 16.01.2006 01:09
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

Verfasst: 16.01.2006 18:43
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: