Screen mit scrollen manipulieren, wie geht das oder mit Spri

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
funkheld
Beiträge: 649
Registriert: 31.12.2009 11:58

Re: Screen mit scrollen manipulieren, wie geht das oder mit

Beitrag von funkheld »

Hallo, grüss dich.
Ich habe Zeit , es treibt mich keiner.
Bleibe doch schön Ruhig....genieße den Tag .

Frohe Pfingsten Josh , wünsche ich dir...ehrlich.

Gruss
peter
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: Screen mit scrollen manipulieren, wie geht das oder mit

Beitrag von captain_hesse »

Hallo
Ich schlage vor das mit dem DrawingBuffer und CopyMemory vorerst mal wieder zu vergessen und einen anderen Lösungsweg zu suchen. Anstatt einen Text auf einen übergroßen Screen zu schreiben und den (Screen) dann zu verschieben solltest du lieber die Position der Objekte auf dem Screen neu berechnen und diese dann an der gewünschten Position neu zeichnen.

Hier mal ein Beispiel wie ich das meine.

Code: Alles auswählen

InitSprite()
  OpenWindow(0, 0, 0, 320, 200, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  OpenWindowedScreen(WindowID(0), 0, 0, 320, 200)
 
    h=16
    Dim text.s(100)
    For i=1 To 100
    text(i)=Str(i)
    Next
  
    s=1  
    e=10
    z=0
    Repeat
      ClearScreen(RGB(0, 0, 0))
      
      h1=0
      For i=s+z To e+z
        h1+h
        If i>100 : Break 2 : EndIf
        StartDrawing(ScreenOutput())
        
        DrawText(0, h1, text(i) )
        
        StopDrawing()
      Next     
      FlipBuffers() 
      z+1
      Delay(200)
      
    Until event=#PB_Event_CloseWindow
    
    
    Delay(1000)

Edit:

So ich habe mir dein Programm mal angeschaut, du hast in Procedure zwei() die Pufferlänge falsch berechnet du mußt natürlich die 16384 ( Bildpunkte ) auch mal 4 Byte rechnen, und dann hast du außerdem zwei Pointervariablen verwendet der du keine Adresse zuordnest. Ich habe Procedure zwei() mal etwas abgeändert

Code: Alles auswählen

Procedure zwei()
  buffer=buffer1
  CopyMemory(buffer1,buffer+16384*4,16384*4)
EndProcedure  
so funktioniert es.
Du solltest aber auf jeden fall immer Pointervariablen statt Variablen vom Typ long für Adressen verwenden.
Gruß Armin
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Antworten