Wie erstelle ich Spiele mit Scrollen?

7

Wie implementieren sie in Spielen wie City Story oder We Farm das Scrollen?

  1. Um mit UIScrollView scrollen zu können, muss die EAGLView-Größe größer sein. In diesen Spielen sieht die Größe von EAGLView wie mehr als 1024 * 1024 aus. Aber es gibt Einschränkungen in der Anzeigengröße in iPhone - Geräten (in 3G iphone max 1024).

  2. Ich habe diese Spiele in 3G iPhone gespielt, sie funktionieren gut.

  3. Irgendeine Idee, wie sie ihren Bildlaufmechanismus implementiert haben?

Chandan Shetty SP
quelle

Antworten:

4

Nun, sie verwenden so etwas wie UIScrollView nicht, das ist sicher. Sie würden die Kamera einfach über eine stationäre Welt bewegen oder die Welt unter eine stationäre Kamera bewegen. Ich bin ein wenig verrostet auf meinem GL, aber ich würde vermuten, dass Sie vor all Ihren Zeichnungen einfach eine neue Übersetzungsmatrix drücken.

Für den eigentlichen Ziehteil würden Sie dies auch selbst implementieren. Es wäre wahrscheinlich etwas, bei dem Sie überprüfen, ob in einer bestimmten Zeitspanne eine bestimmte Menge an Cursor- / Fingerbewegungsdelta vorhanden ist, um festzustellen, ob es sich um ein "Ziehen" oder ein "Klicken" handelt. Oder Sie ziehen immer, es sei denn, der Benutzer klickt auf ein UI-Element oder ähnliches. Es hängt wirklich vom Design ab, wie das System funktionieren soll.

Tetrad
quelle
Sogar ich dachte, dass sie OpengGL-Übersetzung verwenden ...
Chandan Shetty SP
Es geht nur darum, es zu schaffen, damit Sie nicht hart klemmen, wenn Sie an den Rand der Welt gelangen. Wenn Sie die Kamera bewegen können, können Sie herausfinden, wie Sie den Sprung nachahmen können.
Tetrad
4

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?

BerggreenDK
quelle
Eine gute Möglichkeit, das Ansichtsfenster- / Kamerakonzept zu zeigen, wird in zukünftigen Erklärungen verwendet = D
DFectuoso
1
Schöne Erklärung ... Es bedeutet, dass sie die Größe der Ansicht festlegen und Übersetzungen verwenden, um das Scrollen anzuzeigen.
Chandan Shetty SP
Ich habe das nicht erfunden. Ich komme aus der Zeit im alten Commodore 64 Tage (8-Bit mit 64 KB RAM), also habe ich es auf die harte Tour gelernt. Es gab kein ausgefallenes Ansichtsfenster oder eine grafische Benutzeroberfläche, daher musste eine Möglichkeit zum Scrollen entwickelt werden. Das gleiche gilt für Super Mario und viele, viele, viele andere alte Spiele auf Kachelbasis. Es kann aber auch für 3D-Vektorspiele verwendet werden. Die "Kacheln" sind nur ein bisschen anders. Schauen Sie sich diese an 3d.d9.dk/biplane/?test-scroller
BerggreenDK
Ändern Sie einfach die "Ansicht" auf einer der Schaltflächen und Sie können sehen, wie die "Kacheln" am Horizont hinzugefügt werden. Wenn Sie die Campos in "Vor dem Flugzeug" ändern, können Sie auch sehen, wie sie hinter dem Flugzeug entfernt werden.
BerggreenDK
2

Scrollen bedeutet nicht unbedingt, alles in den Speicher zu laden. Der übliche Weg, um damit umzugehen, besteht darin, Ihren Inhalt in Kacheln zu unterteilen, die nach Bedarf in den Speicher geladen werden. Apple hat unter http://developer.apple.com/library/ios/#samplecode/ScrollViewSuite/Introduction/Intro.html ein Beispiel für die Anzeige großer Bilder.

Spiele neigen jedoch dazu, etwas anderes zu tun. Selbst wenn es möglich ist, die vorherige Technik zu verwenden, ist das Laden von Daten von der Festplatte langsam und kann das Spielerlebnis für den Benutzer stören. Aus diesem Grund wird der zu scrollende Bereich normalerweise in Teile geschnitten, die Sie später wiederverwenden können, wodurch das Gefühl entsteht, dass die ganze Welt größer ist, als sie wirklich in Erinnerung bleiben könnte.

Sie können mehr über Kacheln mit einem Karteneditor wie Tiled Map Editor erfahren und im Internet nach Tutorials suchen, wie Sie sie verwenden / in Ihr Spiel integrieren können. Spiele wie Diablo verwenden bekanntermaßen gekachelte Karten, die logisch in größere Kacheln aufgeteilt sind, die zusammengeklebt sind und bei jedem Spiel riesige pseudozufällige Karten erzeugen.

Grzegorz Adam Hankiewicz
quelle
0

Eine andere Möglichkeit, das Scrollen für ein 2D-Spiel zu implementieren, besteht darin, Ihre Projektionsmatrix so zu manipulieren, dass sie widerspiegelt, wo sich der Bildschirm / die Kamera in der Spielwelt befindet.

Ich habe eine 2D-Kameraklasse implementiert, die ihre Position und die Breite / Höhe des sichtbaren Bereichs hatte. Bevor Sie die Spielwelt zeichnen, richten Sie die Orthoprojektionsmatrix ein.

z.B

float left = camera->X - (camera->Width / 2.0f);
float bottom = camera->Y - (camera->Height / 2.0f);
float right = left + camera->Width;
float top = bottom + camera->Height;

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glOrthof(left, right, bottom, top, -50.0f, 1.0f);

Ich hoffe das hilft. Oh, und Sie würden die Projektionsmatrix auf etwas anderes zurücksetzen, wenn Sie anschließend UI-Elemente usw. zeichnen möchten.

All dies gilt natürlich nur, wenn Sie Ihr Spiel in openGL schreiben.

bcowcher
quelle