Frage

OK. Ich bin in essense versucht, meine eigene Interpretation der NES-Hardware zu machen, so dass ich ein Spiel machen, die sie ideal ähneln würde, was für ein NES-Spiel aussehen würde. Ich bin zur Zeit stecken mit wie man einstellen, wie das Spielfeld in den Videospeicher zeichnen (Back-Puffer).

Backbuffer

Die NES hatte Beschränkungen des Nametable oder Backbuffer. Für mein Beispiel ist die Backbuffer 256x240pixels groß, oder die Größe eines Bildschirms. Wenn ich das an den Fernseher zog, würde es den Bildschirm perfekt füllen. Nun, wenn ich diese auf den Bildschirm zog mit einem Versatz von X = 5, würde das gesamte Bild verschoben werden und würde den Bildschirm umschlingen.

Zum Beispiel .....

ORIGINAL, NO OFFSET:                      DRAWN WITH OFFSET OF X=5:
ABCDEFGHIJK                               GHIJKABCDEF

DRAWN WITH OFFSET OF X=-5:
FGHIJKABCDE

Der Bildschirm ist aufgeteilt in Quadrate 8x8 Pixel, die jeweils in Höhe von insgesamt 32x30 Zeilen und Spalten. (256x240 Pixel). Der Offset wird in Pixeln dargestellt - keine Spalten; so in der Theorie, könnte ich den Bildschirm um 5 Pixel versetzt und jede Spalte würde nach rechts um fünf Pixel verschoben werden.

LEVEL DESIGN

My Stufen sind von Bildschirmen aus, die Daten enthalten, die in 16x15 Zeilen und Spalten, die jeweils von 16x16 Pixeln dargestellt wird. Dies ist zu emulieren, wie viele NES Spiele gespeichert Level-Daten -. Jede Kachel hält Informationen über das, was in jedem 8x8-Block sein sollte

Z. B:.

AA
BC     with A,B,C,D representing what 8x8 graphic should go where

Das Level-Design durch das so gut vertreten ist, mit jeder Nummer ein anderer Bildschirm und mehr -. Bedeutet nichts, null

-----
-123-
---4-
--54-
-----

CHARACTER PLATZIERUNG Das ist einfach. Ich weiß schon, wie ich feststellen kann, welche Tabelle, Zeile und Spalte meiner Charaktere auf auf ihrer absoluten Positionierung basieren. Ich kann auch die relative Positionierung innerhalb des Bildschirms bestimmen.

Mit dieser Info, kann ich leicht herausfinden, welche Spalten links und rechts neben dem Zeichen, wenn überhaupt (wenn das Zeichen an der linken Seite des Bildschirms 1, TheRed nicht mehr Ebene links)

SO hier die Frage DUN DUN DUN Wie kann ich meine Ebenen auf den Bildschirm zeichnen, so dass sie von einem zum nächsten blättern. Es wäre relativ einfach, ein Vollbild zu einem Zeitpunkt, zu zeichnen, und wenn das Zeichen an den Rande wird nur Flip auf einem anderen Bildschirm.

Doch das Problem, das ich vom Konzept her habe, ist, dass ich zu ‚Strom‘ muß die Pegeldaten auf den Bildschirm. Das, sagen wir mal das Zeichen 24 Pixel nach rechts bewegt. Die BG muss auch bewegen.

Also, ich brauche das Scrollen des Backbuffer von 24 Pixel einzustellen. Allerdings nur allein Scrollen auf dem Bildschirm wickeln über bewirkt, alten Teil der Ebene diplsaying. Also, beim Scrollen muss ich sicherstellen, dass neue Stücke der Ebene in den Rückpuffer zu zeichnen. Aber bevor ich das tun kann, ich brauche, um herauszufinden, welche Fliesen müssen zuerst gezogen werden. Und wenn die Person 24 Pixel nach links geht, muss ich Fliesen auf den Backbuffer neu zu zeichnen und die dementsprechend auch Offset ändern.

Und lassen Sie uns nicht vergessen, dass, wenn der Charakter bewegt sich nach rechts und es gibt nicht mehr Level-Daten gezogen werden, sollte es nicht ausgeglichen werden, sondern der Charakter wird näher an der Seite des Bildschirms (anstatt in der Mitte des zentrierten Bildschirm über die X-Achse).

Im Grunde genommen, ich habe nur eine Menge verschiedener Zahlen und Werte in meinem Kopf jetzt fest - versuche, meinen Kopf um viele Konzepte zu wickeln und sie verursacht mein Gehirn in Schmiere zu drehen. Wer noch keine Perspektive auf, wie ich diesen Ansatz kann?

EDIT: Mit VB.Net. C # ist anwendbar als auch (I-Programm in beide)

War es hilfreich?

Lösung

Die Art und Weise die NES es tat, war mit 4 Name Tabellen, jede 256x240. Wenn Sie eines aus dem Bildschirm gescrollt, würde die neben einer Rolle auf. Um „Welten“ größer als 512x480, Sie den Namen Tabelle an den Positionen aktualisieren, die offscreen sind.

würde hat im allgemeinen eine Kassette, die eine giant Tabelle in ROM mit all den Pegeldaten, und würde mit 1 oder 2 RAM Variablen, um die Gesamtposition nachverfolgen. Dann, wenn das Spiel gescrollt, würde es die RAM-Variablen aktualisieren, verwenden diejenigen, die die Ebene Datentabelle zum Nachschlagen und kopieren Sie in der neuen Ebene Daten in die Teile der Namenstabelle, die außerhalb des Bildschirms waren.

Also eigentlich Ihr Back-Puffer 512x480 sein sollte, und Sie zeigen nur einen 256x240 Teil davon.

Haben Sie bei der Demontage für alle NES-Spiele sehen die großen Scrollen Welten? Ich denke, eine teilweise Demontage von Metroid dort irgendwo ist aus ...

... ja, einige Dokumente unter romhacking.net

Metroid Demontage ; nicht wirklich gut kommentiert, aber mit einer wenig Mühe heraus, es sollte nicht allzu schwer sein, um es heraus.

Eine weitere Demontage , die besser wird kommentiert.

EDIT: In der 2. Demontage oben geschrieben, Blick in MetroidGameEnginePage.txt auf der "SetupRoom" Routine und der "DrawRoom" Routine; auch die Routine im Etikett LEB4D zeigt, wie die Namenstabelle wird in einem Fall aktualisiert. Betrachten Sie auch die umfangreichen Kommentare über der „GetNameTable“ Routine. Im Allgemeinen ist eine Textsuche nach „Namentabelle“ im gesamten Dokument finden Sie viele bekommt mehr.

EDIT EDIT: Auch bei romhacking.net; die Speicherkarte für SMB könnte nützlich sein.

Andere Tipps

I würde ein Gitter von Bildsteuerung eingerichtet, und die Pegel von einer Datenbank geladen werden, dass speichert, welche Spalte und Zeile jedes Bildes auf das Niveau relativ. Sobald das Bild, das das Spiel der Zeichen steht weit genug nach rechts wird (Sie würden die Lage in einigen Modulebene Variablen speichern) des Bildschirms würden Sie die nächste Spalte der Bilder laden (während alle anderen Bilder ein, um die Verschiebung links und Entfernen der ersten Spalte).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top