Ein Scroller ist ganz einfach ein "virtuelles Ansichtsfenster", das neue Kacheln / Objekte aus der Richtung, in die Sie scrollen, hineinschiebt.
Ein einfaches Beispiel, um dies zu sehen, ist das Erstellen eines einfachen 1-Zeilen-Auswahlrahmens (Textscroller).
Nehmen wir zum Beispiel an, wir haben eine Zeile mit 20 Zeichen / Buchstaben / Zeichen.
Wir platzieren sie in einem String / Array wie:
String viewport = "....................";
String text = "Hello World (how original!)";
Wenn wir dies jetzt drucken, sehen wir nur die "Punkte".
Console.WriteLine(viewport);
Um es zu scrollen, müssen wir die Punkte nach links bewegen. So können wir den eingehenden Text lesen.
Damit dies geschieht, entfernen wir den ersten Buchstaben von links und fügen den nächsten hinzu, der von rechts angezeigt wird.
also sagen wir:
viewport = viewport.Substring(2);
den 2. Buchstaben nehmen und weiterleiten, was dem Rest des aktuellen Inhalts des Ansichtsfensters entspricht.
Jetzt ist das Ansichtsfenster 1 Zeichen / Buchstabe zu schmal, sodass wir das nächste Zeichen aus dem Scroller hinzufügen müssen. Daher benötigen wir eine Variable, um zu steuern, wo wir uns im Bildlauftext befinden.
// place this outside your scroll loop
int scrollPos =0;
Mit diesem Index können wir nun das nächste Zeichen finden.
char next = text.substring(scrollPos,1);
Fügen Sie dies dann dem Ansichtsfenster hinzu.
viewport += next;
Und erhöhen Sie Ihre Position im Scrolltext.
scrollPos++;
Jetzt haben wir den Inhalt 1 Zeichen übrig gescrollt.
Machen Sie dies immer und immer wieder und es sieht so aus, als würde die "Hallo Welt" über Ihr Ansichtsfenster scrollen.
Stellen Sie sich nun diesen Trick in alle Richtungen vor. Anstelle von Zeichen verwenden Sie Ihre eigenen "Kacheln". Zweitens, um es reibungslos zu machen, fügen Sie Ihrem Scroller auch eine "Pixel-Schriftrolle" hinzu oder Sie multiplizieren Ihre Scrollpos der Einfachheit halber einfach. Wenn Sie dann herausfinden müssen, welche Kachel als Nächstes hinzugefügt werden soll, teilen Sie einfach Ihre aktuellen Bildlaufpositionen durch die Kachelbreite. Dann wissen Sie, ob Sie den Bildlaufinhalt des Ansichtsfensters in eine beliebige Richtung verschieben müssen.
Wenn Sie Arrays scrollen müssen (mit Kachel- / Blockdaten), können Sie dies mit einfachen for-Schleifen tun.
linke Schriftrolle
for (int pos=0;pos<viewwidth;pos++)
{
tilemap[pos] = tilemap[pos+1];
}
tilemap[width] = newTile; // from maparray.
Puh
Das war eine lange Erklärung. Verstehst du meinen Standpunkt hier oder brauchst du weitere Erklärungen?