Bildschirmflackern ???

Anfängerfragen zum Programmieren mit PureBasic.
Fairman68
Beiträge: 12
Registriert: 06.01.2006 20:00
Wohnort: Weiden i. d. Opf.

Bildschirmflackern ???

Beitrag von Fairman68 »

Hallo Leute, ich bin hier zum ersten mal, und wenn es für Anfänger einen Preis geben würde dann hätte ich ihn bestimmt bekommen, aber ich weis nicht mehr weiter.

Problem:
Ich habe ein kleines Prg. geschrieben und da werden Teile des Bildschirms immer aktualisiert (überdeckt), nur nach jeder aktualisierung Flackert einmal der Bildschirm auf. Ich denke mal das hat was mit den Flipbuffers zu tun , oder proge ich ganz falsch, mit Clearscreen bekomme ich es überhaupt nicht mehr unter Kontrolle.
hier das Prog.. (nicht lachen! :lol: )

Mit den F-Tasten (F3,F4) soll der balken erhöt oder gesenkt werden, drückt mal drauf wie das Flackert, dabei aktualisiere ich doch immer nur das Rechteck und nicht den ganzen Bildschirm ???

Über jede Anregung oder idee bin ich sehr dankbar.

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()
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()
StartDrawing(ScreenOutput())
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
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Also ich für meinen Teil bevorzuge wenn man alles in Proceduren packt, dass ist ein wenig langsammer aber IMHO wesentlioch übersichtlicher.
Benutzeravatar
crossroads
Beiträge: 244
Registriert: 29.08.2004 05:41
Wohnort: Rhine Main Area

Beitrag von crossroads »

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() 
StartDrawing(ScreenOutput()) 
ClearScreen(0,0,0)
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()) 
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 
Der Knackpunkt ist:
Hinter dem Label
Anzeige:
ein ClearScreen() einzufügen.
Man soll die Tür aufmachen, bevor man durchgeht ...
Fairman68
Beiträge: 12
Registriert: 06.01.2006 20:00
Wohnort: Weiden i. d. Opf.

Beitrag von Fairman68 »

erstmal danke für die schnelle reaktion.. :)

alles schön und gut es sollen nur Teile des Bildschirms aktualisiert werden. nach drücken der F10Taste ist schonmal der blaue Rahmen weg.. :cry:
ich kann doch nicht jedesmal das ganze Bild neu aufbauen ???? da kommt noch so eine ganze menge später auf den Bildschirm hinzu. Dann flackert es wieder oder man sieht förmlich wie sich der Bildschirm aufbaut. es sind viele kleine unterprogramme die den Bildschirm ständig verändern.. der Blaue rahmen muss dabei immer bleiben.. wie Progt man sowas.???

habe früher viel mit Q-Basic geschrieben. und da geht das problemlos.... :allright:
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Nunja du kannst ja immer alles auf ein Sprite renderst den Screen kannst du dann clearen wie du willst. warum es jetzt bei dir so zuckelt ist mir allerdings noch nicht ganz klar.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

..also nur zur Info:

Die Version von Crossroads funktioniert bei mir einwandfrei.
Und das, obwohl ich
Azureus (Down- und Upload, LimeWire (Download und beim Musikabspielen), GAIM (mit mehrerern offenen Fenstern), Winamp, JaPBe und Firefox gleichzeitig offen hatte.

Manchmal ging die Mucke von limeWire Player kurz aus-ist ja auch Java.

Naja-aber trotzdem läuft es einwandfrei..

Warum ruckelt es denn bei dir?
Was hast du fürn System....?

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Flackern tut es normalerweise nur wenn man öfter als ein mal pro Schleife FlipBuffers() aufruft.

Also z.B so ist es falsch

Code: Alles auswählen

;... Screen ist offen usw
repeat
flipbuffers()  ; Hier sollte kein Flipbuffers() stehen, wenn schon eins am Ende ist. 
examinekeyboard()
displaysprite(0,0,0)
displaysprite(1, 10, 10)
flipbuffers() ; Hier am Ende ist Flipbuffers() angebracht
until keyboardpushed(#PB_Key_Escape)
Am besten direkt am Anfang oder Ende der Schleife schreiben.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
crossroads
Beiträge: 244
Registriert: 29.08.2004 05:41
Wohnort: Rhine Main Area

Beitrag von crossroads »

Batze hat geschrieben:Flackern tut es normalerweise nur wenn man öfter als ein mal pro Schleife FlipBuffers() aufruft.
...
Am besten direkt am Anfang oder Ende der Schleife schreiben.
Wieso am Anfang :roll:
Falsch ist:
am Anfang FlipBuffers(); damit wird zunächst ein veralteter Buffer angezeigt

Richtig wäre:
alle Sprite-; Zeichenoperationen etc. in den (unsichtbaren) Buffer zu schreiben und abschließend mit FlipBuffers() sichtbar zu machen ...
Man soll die Tür aufmachen, bevor man durchgeht ...
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Re: Bildschirmflackern ???

Beitrag von AND51 »

Warum Doppelpost? Ich habe nur einmal auf "Absenden" geklickt... :? :o :shock:
Zuletzt geändert von AND51 am 14.01.2006 22:24, insgesamt 1-mal geändert.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Re: Bildschirmflackern ???

Beitrag von AND51 »

Fairman68 hat geschrieben:hier das Prog.. (nicht lachen! :lol: )
In einem anderen Thread, der AND51 hat geschrieben:Egal, wie viele Zeilen Code das erste Projekt hat: Ich denke, ich spreche für alle, wenn ich sage, dass das erste Projekt etwas ganz besonderes ist (und wenn es später noch so "billig" erscheint ;-) ).
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten