Parallax Scrolling


Parallax Scrolling

von FlorianD » Do 16. Sep 2010, 11:11
Hallo,

gibt es irgendwo etwas über Parallax Scrolling, Beispiele, Artikel in (ABBUC) Mags, usw.?

Mit schwebt da was vor mit 3 Ebenen Hintergrund (2,2,6 Zeilen hoch), dann freies Spielfeld (10 Zeilen) und 1 Ebene Vordergrund (2 Zeilen), zuletzt feststehend 2 Zeilen Status.

Viele Grüße,
Florian

Re: Parallax Scrolling

von Jac » Fr 17. Sep 2010, 18:57
Hi Florian,

Einfach nur verschieden Scroll-Ebenen von oben nach unten mit Playern drüber ist einfach:
DL:
DLI
LMS+VSCROLL+DLI: Ebene1
LMS+VSCROLL+DLI: Ebene2
LMS+VSCROLL+DLI: Ebene3

per DLI VSCROLLsetzen und per hochzählen der LMS Pointer scrollen um ganze Bytes zu verschieben.
Für jede Eben braucht man einen Zähler.Einfachster Fall: bei Graphics 12 is max=4
add 1,xpos1 ; Geschwindigkeit1
if xpox1 > max
xposx1-=max
add 1, lms1

add 2,xpos1 ; Geschwindigkeit2
if xpox1 > max
xposx2-=max
add 1, lms2

add 3,xpos1 ; Geschwindigkeit3
if xpox1 > max
xposx2-=max
add 1, lms3

Re: Parallax Scrolling

von Schuster » Fr 17. Sep 2010, 19:38
FlorianD hat geschrieben:Hallo,

gibt es irgendwo etwas über Parallax Scrolling, Beispiele, Artikel in (ABBUC) Mags, usw.?

Mit schwebt da was vor mit 3 Ebenen Hintergrund (2,2,6 Zeilen hoch), dann freies Spielfeld (10 Zeilen) und 1 Ebene Vordergrund (2 Zeilen), zuletzt feststehend 2 Zeilen Status.

Viele Grüße,
Florian


Schau mal hier: http://www.atariarchives.org/dere/chapt06.php
Vielleicht hilft es dir ja.

Gruß
Frank

Re: Parallax Scrolling

von Koche » Sa 18. Sep 2010, 00:29
etwas so hier ?????

http://www.youtube.com/watch?v=sBhT615-j8M

Demonstriert 3, zur Not auch 4 Ebenen (im Moment nicht implementiert ... wäre nichts weiter als ganz vorn bisweilen mal ein Telegraphenmast ;-) ) und ruckelt auf orig. HW übrigens nicht!!!! Das Ganze sollte mein Beitrag zum Softwarewettbewerb werden, habe es aber leider zeitlich nicht geschafft bzw. das optimieren hat etwas aufgehalten. ;-(

Die einfachste Methode ist jene, die für die Wolken verwendet wurde .... Man sieht es schlecht, aber es handelt sich auch hier um 3 Ebenen, diese rotieren mit 3 Geschwindigkeiten. Oben wird 4 Pixel verschoben, der 2te Abschnitt 2 Pixel und der unterste einen. Die Ebenen in einem Zeichensatz speichern ist sicherlich nicht schlecht. Leider ist dies sehr unflexibel, wenn man die Höhen wie im Beispiel ab und an verändern will. Auch braucht man zusätzlich noch einen entsprechende Anzahl DLI's , die das VScroll Register für jede Ebene separat anpassen ;-( In meinem Versuch sind es einfach x Grafikzeilen. Offsets werden im Vblank angepasst. Für die Fälle 2 Pixel Verschiebung und 1 Pixel Verschiebung ist noch etwas Vorarbeit nötig. Da immer 4 Pixel in einem Byte gespeichert werden, braucht man für eine sanfte Animation extra Ebenen, die die dort gespeicherten Bildinfos schon um 2 bzw um 4 mal 1 Pixel nach links verschoben haben.

Grüße
Alexander

Re: Parallax Scrolling

von FlorianD » Sa 18. Sep 2010, 12:27
Koche hat geschrieben:etwas so hier ?????

http://www.youtube.com/watch?v=sBhT615-j8M

Demonstriert 3, zur Not auch 4 Ebenen (im Moment nicht implementiert ... wäre nichts weiter als ganz vorn bisweilen mal ein Telegraphenmast ;-) ) und ruckelt auf orig. HW übrigens nicht!!!! Das Ganze sollte mein Beitrag zum Softwarewettbewerb werden, habe es aber leider zeitlich nicht geschafft bzw. das optimieren hat etwas aufgehalten. ;-(

Die einfachste Methode ist jene, die für die Wolken verwendet wurde .... Man sieht es schlecht, aber es handelt sich auch hier um 3 Ebenen, diese rotieren mit 3 Geschwindigkeiten. Oben wird 4 Pixel verschoben, der 2te Abschnitt 2 Pixel und der unterste einen. Die Ebenen in einem Zeichensatz speichern ist sicherlich nicht schlecht. Leider ist dies sehr unflexibel, wenn man die Höhen wie im Beispiel ab und an verändern will. Auch braucht man zusätzlich noch einen entsprechende Anzahl DLI's , die das VScroll Register für jede Ebene separat anpassen ;-( In meinem Versuch sind es einfach x Grafikzeilen. Offsets werden im Vblank angepasst. Für die Fälle 2 Pixel Verschiebung und 1 Pixel Verschiebung ist noch etwas Vorarbeit nötig. Da immer 4 Pixel in einem Byte gespeichert werden, braucht man für eine sanfte Animation extra Ebenen, die die dort gespeicherten Bildinfos schon um 2 bzw um 4 mal 1 Pixel nach links verschoben haben.

Grüße
Alexander


Wow! Die Figur sieht fantastisch aus, sehr saubere Animation!

So wie die Wolken hatte ich mir das auch vorgestellt. Ich käme ohne vertikale Bewegung aus, Zeichensatz hatte ich auch ins Auge gefasst.

Wie kriegst Du die 2 grauen Stadthintergründe hin und die Häuser davor hin????

Re: Parallax Scrolling

von Koche » So 19. Sep 2010, 14:54
Hi,

FlorianD hat geschrieben:
Wow! Die Figur sieht fantastisch aus, sehr saubere Animation!

:oops:

Danke, aber ich habe sie mehr oder weniger nur nachgepinselt ;-(

siehe
http://www.adamatomic.com/canabalt/

So wie die Wolken hatte ich mir das auch vorgestellt. Ich käme ohne vertikale Bewegung aus, Zeichensatz hatte ich auch ins Auge gefasst.

Wie kriegst Du die 2 grauen Stadthintergründe hin und die Häuser davor hin????


Im Grunde ist es nicht viel mehr als eine ORA Verknüpfung von hinterer Ebene (mit Farbe %01 gezeichnet) und mittlere Ebene (%11). Dies führt dazu, dass die Hintere nur durchscheint, wenn vorn nichts ist (%00) usw. Leider würde das für 4*32 Zeichen zu je 8 Byte pro kompletten Bildschirmdurchlauf zu lange dauern, so dass ich die mittlere Ebene nochmal in 3 versch. Typen habe unterteilen lassen (via Perl Skript). Da gibt es "Bausteine", die

- a) komplett überdeckt sind (also nur aus der mittleren Ebene) bestehen
- b) wo sich auf der mittleren Ebene nichts befindet (der Hintergrund also 1:1 & leider trotzdem Zeichen für Zeichen kopiert werden kann)
- c) bei denen ich um ein ORA nicht drum herum komme ;-(

Fall c lässt sich auch noch etwas abfedern .... da ich auf der letzten Ebene nur 16 Zeilen habe, brauche ich auch nur 16 Zeilen dieser Prozedure unterwerfen und kann mich für die anderen auf a und b verlassen. Abfragen werden so weit wie möglich vermieden, was letztlich aber wesentlich mehr Code bedeutet. Hier und da werden noch ein paar extra Datenstrukturen erzeugt, die mir helfen sollen Zeit zu sparen oder auch dafür sorgen, dass ich die vordere Ebene leichter einbinden kann. Und und und. Da gibt es letztlich noch einiges, aber so richtig toll ist es alles nicht. Ich muß mal sehen, was daraus wird, ob was daraus wird. Zumindest stehen die Grafiken für ein Gerüst und die restlichen Animationen (Sprung und abrollen) (auch) schon. Die Sache mit Sprung durch ein Hochhausfenster müsste sich auch realisieren lassen.

Grüße
Alexander

Re: Parallax Scrolling

von Koche » Fr 15. Okt 2010, 22:51
Hallo Florian,

was machen deine Wolken ? ;-)

Auf atarionline (http://www.atarionline.pl/forum/comment ... =1#Item_21) findest Du aktuell einen Diskussionsthread mit einigen Beispielen zu diesem Thema. "Shadow of the Beast" (den Film findest Du dort verlinkt) zeigt bspweise ganz nett, wie man mit mehreren Ebenen (auch Wolken) einiges erreichen kann.

Weil es das Thema nun schon mal her gab habe ich mich gestern mal noch an dem hier probiert ....

http://www.youtube.com/watch?v=lJuemLyHe9k

Hat leider noch ein paar Bugs, aber die fange ich schon noch ;-)

Viele Grüße
Alexander

Re: Parallax Scrolling

von Heaven_tqa » Mo 18. Okt 2010, 08:26
Hallo Alexander,

sieht sehr beeindruckend aus. Ich hab mich auch mal an Flimbo versucht, kam aber nicht über das hier heraus:

http://atari.fandal.cz/detail.php?files_id=5313

benutzt keine highend optimierte Routinen, aber ich fand das übereinanderkopieren von 2 layern sehr zeitaufwendig. Wie hast du das bei Flimbo gemacht?

Re: Parallax Scrolling

von Koche » Mo 18. Okt 2010, 14:58
Hallo Heaven, ;-)

Heaven_tqa hat geschrieben:Hallo Alexander,

sieht sehr beeindruckend aus.



Danke :oops: , aber letztlich .... der eigentliche Programmcode, den ich verzapft habe, ist eine Kleinigkeit, beschränkt sich auf simples abfragen eines Arrays, in dem die Info's für den Vordergrund gespeichert sind, und das entsprechende einfügen des richtigen Zeichens (Vorder- oder Hintergrund) + ein bisschen Koordination. Simpler geht es nicht ;-) Das wirklich aufwendige und wichtige sind (funktionierende) Zeichensätze und die stammen direkt aus dem Spiel Flimbo (C64 Version) Damit habe ich nichts zu tun. ;-(


Ich hab mich auch mal an Flimbo versucht, kam aber nicht über das hier heraus:

http://atari.fandal.cz/detail.php?files_id=5313

benutzt keine highend optimierte Routinen, aber ich fand das übereinanderkopieren von 2 layern sehr zeitaufwendig. Wie hast du das bei Flimbo gemacht?


Für Flimbo habe ich auch nicht mehr gemacht. Übrigens schafft er es auch nicht ganz zwischen Ende VBI & ankommen des Rasterstrahls in der oberste Zeile ;-) Das Spielfeld beginnt nicht grundlos weiter unten ;-) Optimieren könnte man es auf jeden Fall noch (2ter Array, in dem für jede Adresse gespeichert wird, wie viele Zeichen des aktuellen Typs (hinteres oder vorderes) noch zu zeichnen sind ... z.B.) und double buffering wäre sicherlich auch eine Möglichkeit (der Programmcode ist schon dafür eingerichtet). Es würde aber bestimmt reichen, wenn man mit dem Aufbau des neuen Spielfeld in dem Moment beginnt, sobald der Rasterstrahl über die letzte Zeile des alten gerade so hinaus ist.

P.S.:
"Alexander told that his Flimbo works in 50 FPS." .... hab ich ? ;-)

Re: Parallax Scrolling

von Jac » So 23. Jan 2011, 13:19
Hi Florian,
Und bist Du schon weiter?

Re: Parallax Scrolling

von FlorianD » Mo 24. Jan 2011, 19:49
Jac hat geschrieben:Hi Florian,
Und bist Du schon weiter?



neee, leider geht grad gar nichts voran. Erstmal muss jetzt was fertig werden, dann was anderes und dann kommt das mit dem Scrolling dran. :-(
Ich neige offenbar dazu, mich bei Programmierprojekten zu verzetteln...