Flackern bei DrawText in while abfrage

Anfängerfragen zum Programmieren mit PureBasic.
darksmi
Beiträge: 2
Registriert: 12.02.2012 02:17

Flackern bei DrawText in while abfrage

Beitrag von darksmi »

Hallo zusammen,
ich beschäftige mich seit ein paar Tagen mit PureBasic.
Nun experimentiere ich mit LinkedLists und hab vollgendes Problem.
Ich möchte die Liste abfragen und den gesammten Inhalt mit Zeilenumsprung anzeigen lassen.
Geht auch alles soweit. Nur flackern die vier Zeilen. Kann mir jemand sagen warum ? Und wie man es evtl. besser macht ?

Code: Alles auswählen

;Versuche mit LinkedList
InitSprite()
InitKeyboard()
ExamineDesktops()
;###############################################################################################################################
Global Width = DesktopWidth(0)
Global Height = DesktopHeight(0)


;###############################################################################################################################
OpenScreen(Width,Height,DesktopDepth(0),"Pong",#PB_Screen_WaitSynchronization)

SetFrameRate(60)


Structure Test
  feld1.w
  feld2.w
  feld3.w
EndStructure

NewList Testliste.Test()

AddElement(Testliste())
  Testliste()\feld1 = 2
  Testliste()\feld2 = 1000
  Testliste()\feld3 = 150
AddElement(Testliste())
  Testliste()\feld1 = 3
  Testliste()\feld2 = 1500
  Testliste()\feld3 = 250
AddElement(Testliste())
  Testliste()\feld1 = 4
  Testliste()\feld2 = 2000
  Testliste()\feld3 = 350
AddElement(Testliste())
  Testliste()\feld1 = 5
  Testliste()\feld2 = 2500
  Testliste()\feld3 = 450
  
  ResetList(Testliste()) 

;Debug liste
  Repeat                                             ; In dieser Schleife werden die Aktionen durchgefuehrt.
   StartDrawing(ScreenOutput())

   	DrawText(20,0,"Auflösung: "+Str(Width)+" x "+Str(Height)+"",RGB(0,0,0),RGB(255,255,255))
   	DrawText(20,15,"LinkedList Versuche: ",RGB(0,0,0),RGB(255,255,255))
   	
   	While NextElement(Testliste())
  		Liste.s = ""
	 		Liste = Liste + Str(Testliste()\feld1) + " ; " + Str(Testliste()\feld2) + " ; " +Str(Testliste()\feld3)
	 		DrawText(20,(ListIndex(Testliste())+1)*30,"LinkedList auslesen: "+Liste+"",RGB(0,0,0),RGB(255,255,255))
	 	Wend
   	  
  StopDrawing() 
  FlipBuffers()
  ExamineKeyboard()
;###############################################################################################################################
Until KeyboardPushed(#PB_Key_Escape)  
Besten Dank im Vorraus
Darksmi
Benutzeravatar
Bobo-Jack
Beiträge: 26
Registriert: 08.09.2010 11:59

Re: Flackern bei DrawText in while abfrage

Beitrag von Bobo-Jack »

versuchs mal so:

Code: Alles auswählen

;Versuche mit LinkedList
InitSprite()
InitKeyboard()
ExamineDesktops()
;###############################################################################################################################
Global Width = DesktopWidth(0)
Global Height = DesktopHeight(0)


;###############################################################################################################################
OpenScreen(Width,Height,DesktopDepth(0),"Pong",#PB_Screen_WaitSynchronization)

SetFrameRate(60)


Structure Test
  feld1.w
  feld2.w
  feld3.w
EndStructure

NewList Testliste.Test()

AddElement(Testliste())
  Testliste()\feld1 = 2
  Testliste()\feld2 = 1000
  Testliste()\feld3 = 150
AddElement(Testliste())
  Testliste()\feld1 = 3
  Testliste()\feld2 = 1500
  Testliste()\feld3 = 250
AddElement(Testliste())
  Testliste()\feld1 = 4
  Testliste()\feld2 = 2000
  Testliste()\feld3 = 350
AddElement(Testliste())
  Testliste()\feld1 = 5
  Testliste()\feld2 = 2500
  Testliste()\feld3 = 450
 
  ResetList(Testliste())

;Debug liste
Repeat    
  FlipBuffers()
  ClearScreen($000000)
  ExamineKeyboard()
  
   StartDrawing(ScreenOutput()); In dieser Schleife werden die Aktionen durchgefuehrt.
   
      DrawText(20,0,"Auflösung: "+Str(Width)+" x "+Str(Height)+"",RGB(0,0,0),RGB(255,255,255))
      DrawText(20,15,"LinkedList Versuche: ",RGB(0,0,0),RGB(255,255,255))
      
      i=0
      ForEach Testliste()
        
        ;/// Zeichnen
        DrawText(20, 35+(i*100)+25, "Element #"+Str(i), $000000, $FFFFFF)
        DrawText(20+30, 35+(i*100)+50, "Feld 1:"+Str(Testliste()\feld1), $000000, $FFFFFF)
        DrawText(20+30, 35+(i*100)+75, "Feld 1:"+Str(Testliste()\feld1), $000000, $FFFFFF)
        DrawText(20+30, 35+(i*100)+100, "Feld 1:"+Str(Testliste()\feld1), $000000, $FFFFFF)
        
        i+1
      Next
       
   StopDrawing()
       
;###############################################################################################################################
Until KeyboardPushed(#PB_Key_Escape)  
zum flimmern:
Das kam daher, dass du kein clearscreen() in die schleife eingebaut hast.
Wenn du ein Frame zeichnest, musst du erst den alten Inhalt des Screenbuffers "löschen" mithilfe von clearscreen().

hier noch mal ein kurzer code zur veranschaulichung von clearscreen :

Code: Alles auswählen

#ScreenWidth = 800
#ScreenHeight = 600

InitMouse()
InitSprite()
OpenScreen(#ScreenWidth, #ScreenHeight, 32, "Blub")
MouseLocate(#ScreenWidth/2, #ScreenHeight/2)

Repeat
  FlipBuffers()
  ClearScreen($000000)  ; Machs weg um den unterschied zu sehen!
  ExamineMouse()
  
  StartDrawing(ScreenOutput())
  
    ;/// Maus Anzeigen
    Line(MouseX(), MouseY(), 8, 5, $FFFFFF)
    Line(MouseX(), MouseY(), 5, 8, $FFFFFF)
    
    ;/// Noch nen text
    DrawText(10, 10, "Drück Reckte Maustaste zum Beenden!", $FFFFFF)
    
  StopDrawing()
  
Until MouseButton(#PB_MouseButton_Right)

End
  
    
    
hoffe ich konnts dir erklären. viel glück noch <)

daniel
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Flackern bei DrawText in while abfrage

Beitrag von Danilo »

Durch Deine Schleife 'While NextElement(Testliste())' wird es nur einmal gezeichnet,
da Du die Liste nicht zurücksetzt.
Machst Du ein ResetList(testliste()) direkt vor die Schleife flackert nichts mehr.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Bobo-Jack
Beiträge: 26
Registriert: 08.09.2010 11:59

Re: Flackern bei DrawText in while abfrage

Beitrag von Bobo-Jack »

Danilo hat geschrieben:Durch Deine Schleife 'While NextElement(Testliste())' wird es nur einmal gezeichnet,
da Du die Liste nicht zurücksetzt.
Machst Du ein ResetList(testliste()) direkt vor die Schleife flackert nichts mehr.
ja genau oder so.
Dann würde es ja nichtmal am clearscreen liegen... sollte aber trotzdem in die schleife find ich. :wink:
darksmi
Beiträge: 2
Registriert: 12.02.2012 02:17

Re: Flackern bei DrawText in while abfrage

Beitrag von darksmi »

:bounce:
Man Danilo, dein Ruf eilt Dir vorraus.
Du bist der jenige der meine Gedankenblase zum platzen gebracht hat. Da muss sich was verklemmt haben.
Blöder Fehler loool
Jajaja der wink mit dem Zaunpfahl. Hab mir erst mal vor die Stirn gehauen.
Ja logisch. Habs verstanden.

Super und danke Euch beiden für die schnellen Antworten.
Lasst es Euch gut gehen und ein schönes Wochenende noch.

Auf bald 8) darksmi
Antworten