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
Screen mit scrollen manipulieren, wie geht das oder mit Spri
- 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
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.
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ändertso funktioniert es.
Du solltest aber auf jeden fall immer Pointervariablen statt Variablen vom Typ long für Adressen verwenden.
Gruß Armin
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
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)