Seite 1 von 1

Flackern bei DrawText in while abfrage

Verfasst: 17.02.2012 21:46
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

Re: Flackern bei DrawText in while abfrage

Verfasst: 17.02.2012 22:09
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

Re: Flackern bei DrawText in while abfrage

Verfasst: 17.02.2012 22:12
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.

Re: Flackern bei DrawText in while abfrage

Verfasst: 17.02.2012 22:17
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:

Re: Flackern bei DrawText in while abfrage

Verfasst: 17.02.2012 22:21
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