Seite 1 von 3
Screen mit scrollen manipulieren, wie geht das oder mit Spri
Verfasst: 11.05.2013 11:35
von funkheld
Hallo , guten Tag.
Ich habe einen Z1013-Screen mit 32x32 Zeichen, die aufgrund der Windowauflösung je Zeichen 16x16 Pixel sind.
Die Zeichen werden Pixelweise aus einer Font-Datei.bin hergestellt. Nun möchte ich , wenn der Grafiktext unten angekommen ist den Inhalt des Screen 16 Grafikzeilen nach oben Scrollen, das die oberste Zeile verschwindet und unten eine Leerzeile gesetzt wird.
Wie kann man das Scrollen machen mit dem Screen ?
Oder kann wie kann man das irgenwie mit Sprite verwirklichen ?
Danke.
Gruss
peter
Re: Screen mit scrollen manipulieren, wie geht das oder mit
Verfasst: 11.05.2013 15:18
von NicTheQuick
Du hast die selbe Frage doch schon an anderer Stelle gestellt. Wieso jetzt hier wieder?
Re: Screen mit scrollen manipulieren, wie geht das oder mit
Verfasst: 11.05.2013 15:20
von Bisonte
Alzheimer ? Authist ? oder einfach nur Voltax vergessen ?
Re: Screen mit scrollen manipulieren, wie geht das oder mit
Verfasst: 11.05.2013 15:37
von funkheld
Jup, hier war jetzt die Frage , wie man einen Screen
scrollt.
Wie bekomme ich die Adresse von "buffer" in die CopyMemory-Routine.
Die buffer-adresse ist hier von:
Code: Alles auswählen
StartDrawing(ScreenOutput())
Buffer = DrawingBuffer()
StopDrawing()
Bei CopyMemory werden doch nur die über "AllocateMemory(Größe [, Flags])" erkannt, ist das richtig ?
Danke.
Gruss
peter
__________________________________________________
Code-Tags hinzugefügt
11.05.2013
RSBasic
Re: Screen mit scrollen manipulieren, wie geht das oder mit
Verfasst: 11.05.2013 17:30
von NicTheQuick
Falsch. Mit CopyMemory kannst du jeden Speicher kopieren, der zu deinem Prozess gehört. Also auch den DrawingBuffer.
Re: Screen mit scrollen manipulieren, wie geht das oder mit
Verfasst: 11.05.2013 18:13
von funkheld
Hmm, stürzt ab...
Falsch. Mit CopyMemory kannst du jeden Speicher kopieren, der zu deinem Prozess gehört. Also auch den DrawingBuffer.
..........????
Mit "Button test1" wird in den Buffer geschrieben.
Bei "Button test2" sollen die Pixel an Ende der ersten Pixel dran gehängt werden mit CopyMemory und da steigt das Programm aus, auch wenn ich nur 4 Byte kopiere, mit der Einbettung ins Startdrawing stürzt es auch ab.
Danke.
Gruss
peter
Code: Alles auswählen
Global buffer.l,buffer1.l,buffer2.l,x.l
Declare eins()
Declare zwei()
Enumeration
#Window_0
#button_1
#button_2
EndEnumeration
InitSprite()
InitKeyboard()
OpenWindow(#Window_0,0,0,600,600,"test",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Window_0), 10, 10, 512,512)
ButtonGadget(#button_1, 10,550, 80, 25, "test1")
ButtonGadget(#button_2, 100,550, 80, 25, "test2")
StartDrawing(ScreenOutput())
Buffer = DrawingBuffer()
;Pitch = DrawingBufferPitch()
;PixelFormat = DrawingBufferPixelFormat()
buffer1=buffer
StopDrawing()
ClearScreen(RGB(0,0,0))
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
If EventGadget = #Button_1
eins()
EndIf
If EventGadget = #Button_2
zwei()
EndIf
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
FlipBuffers()
ForEver
Procedure eins()
buffer=buffer1
For x = 1 To 16384
PokeL(buffer,$ffffff)
buffer=buffer+4
Next
EndProcedure
Procedure zwei()
buffer=buffer1
CopyMemory(*buffer1,*buffer+16384,16384)
EndProcedure
Re: Screen mit scrollen manipulieren, wie geht das oder mit
Verfasst: 11.05.2013 23:37
von funkheld
Hallo, guten Abend.
Kann hier wer helfen mit diesem CopyMemory-Absturzt ?
Danke.
Gruss
peter
Re: Screen mit scrollen manipulieren, wie geht das oder mit
Verfasst: 15.05.2013 14:15
von funkheld
Hallo, guten Tag.
Gibt es bitte gegen den Absturz eine Lösung bei Copymemory/Allocate .
Danke.
Gruss
peter
Re: Screen mit scrollen manipulieren, wie geht das oder mit
Verfasst: 15.05.2013 14:34
von NicTheQuick
Na ist doch klar. Wenn der Buffer nun mal nur 16384 Bytes groß ist, wieso glaubst du dann, dass du die selbe Menge Bytes nochmal dahinter kopieren kannst?
Im Übrigen nutzt man nicht den Typ Long (.l) als Pointer, sondern, wenn man schon keine richtigen Pointer nutzen will, nimmt man Integer (.i), sonst läuft es bei Leuten mit 64-Bit-Betriebssystem nicht. Dann wäre es schön, wenn du 'EnableExplicit' an den Anfang deines Codes stellst, sonst wollen dir die meisten hier eh schon nicht helfen, weil es womöglich eh nur ein Tippfehler war.
Und wenn du ja schon im Screen arbeitest, wieso nutzt du dann nicht gleich Sprites, in die du deinen Text rein malst. Die kannst du dann in weniger als einer Millisekunde an beliebiger Stelle deines Screens darstellen. Oder du malst es um ein paar Pixel nach oben verschoben in ein zweites Sprite und stellst das dann an Koordinate (0, 0) dar. Naja... Aber du willst ja lieber mit deinem DrawingBuffer experimentieren, oder?
Re: Screen mit scrollen manipulieren, wie geht das oder mit
Verfasst: 15.05.2013 23:06
von funkheld
Hallo, gute Abend.
ScreenOutput() hat 512x512 Pixel und jedes Pixel hat 4 Byte.
Warum soll bei ca 32000 schon die Luft raus sein ? Das verstehe ich nicht ?
Und wenn ich nur 1 Byte copiere, bricht das Programm auch schon zusammen.
Gruss
peter