2009-04-08 16 views
9

Ich schreibe gerade ein kleines Overhead-RPG, das der klassischen Ultima-Serie sehr ähnlich ist. Ich brauche eine schnelle und dreckige (schneller als dreckige) Art, große Karten zu entwerfen - sagen wir mal 1000 Kacheln mal 1000 Kacheln, und ich brauche Hilfe, um darüber nachzudenken, wie man das macht.Die beste Art, eine Spielkarte zu erstellen

Ich würde sagen, dass es eine gute 50-60 verschiedene Arten von Fliesen sind - Wälder, Flüsse, Ebenen usw.

Bisher war die beste, die ich mit war einfiel

  • definieren ein Array (oder eine ähnliche Struktur), das zwei wichtige Informationen enthält - eine Positions-/Koordinaten-ID und eine Ganzzahl von 1 - 60, die angibt, um welche Art von Kacheln es sich handelt.

  • Zeichnen Sie in einer Rasterbearbeitungsanwendung ein Bild mit 1000px x 1000px. Mit einer Palette von 50 verschiedenen Farben zeichne ich meine Karte - 1 Pixel entspricht 1 Kachel. Sprich für eine gegebene Wasserfliese, zeichne ich eine Gruppe von Pixeln in einem bestimmten Blauton. Speichern Sie als .gif oder .png.

  • schreibe einen Prozessor, der dann das oben erwähnte gif/jpg analysiert und Pixel für Pixel analysiert. Abhängig vom RGB-Wert des Pixels bestimmt er den Kacheltyp. Der Prozessor generiert dann Code-Routinen, die das Karten-Array auffüllen.

Bis jetzt denke ich, dass es einen einfacheren Weg geben muss.

Antwort

2

Klingen wie ein ziemlich guter Weg zu mir. Möglicherweise ist es jedoch so einfach, einen benutzerdefinierten Map Builder zu erstellen.

Eine andere Option könnte sein, ein Programm zu schreiben, mit dem Sie einfach die Position der Hauptfunktionen definieren können, und ein Generatorprogramm füllt den Rest aus. (ZB: Fluss, der von x1, y1 zu x2, y2 läuft. "Großer" Wald, zentriert um x, y usw.). Dadurch können Sie eine große Karte nur aus einer kleineren Datei mit geografischen Merkmalen definieren. Stellen Sie sich das so vor, als würden Sie das Vektorzeichnen durchführen, anstatt jedes letzte Pixel in einem Raster anzugeben. :-)

11

Muss es auf Kacheln basieren? Werfen Sie einen Blick auf Daniel Cook Website, Lost Garden, nicht nur sie gibt Ihnen ein paar leckeres freies Kunstwerk, aber er beschreibt das Aufkommen von willkürlicher Platzierung von Bildern in den Spielen, sondern die Fliesen:

„Es ist einmal, Sie benötigt kleinen quadratischen Fliesen für alles zu benutzen. Heutzutage gibt zu machen eine Fliese basiert 2D-Engine keine wirkliche Notwendigkeit ist. mit beliebige Bilder mit voller alpha und viel Füllrate, können Sie zusammen ein Spiel setzen wie ein Aufkleberbuch Lassen Sie Ihre Grafiken bei beliebig Positionen und Schicht wie ein Verrückter fallen Spiele mögen Aquaria gut aussehen und Fliesen sind nirgends zu sehen."

gibt es auch einen Link dort für step-by-step instructions auf sie ein in-Game-Editor basiert auf IndieLib.

+1

+1 für aus dem Kasten heraus denken! Ich werde die ganze Nacht hier sein! –

1

Eine andere Möglichkeit wäre, die (Pixel) zu erzeugen Karte oder direkt die Spielkarte. Dies ist natürlich abhängig von der Größe Ihrer Welt, und wenn Sie viele spezifische Ressourcen haben (eine Stadt an dieser Stelle, eine Mine an dieser Stelle ...)

Es gab eine Menge Artikel zu diesem Thema auf der Website über die Spiel "Rogue", das könnte durchaus brauchbar sein. (Versuchen Sie RogueBassin zum Beispiel)

Sie sprechen auch über die Datenstruktur, um mehr Variation zu ermöglichen (z. B. um ein Basisbild zu erhalten und eine zufällige Anzahl von (kleinen) "Randbildern" hinzuzufügen, wenn Sie die Repräsentation in Ihrem Karten-Array definieren. Zum Beispiel, um ein wenig kleinen Stein zum Gras hinzuzufügen). Andere Effekte, wie sie in Ultima V erscheinen, wo einige Dachelemente transparent wurden, wenn Sie sie passieren, basieren auch auf dieser Struktur.

Wir fanden, dass ein Bild (in unserem Fall eine Reihe von Bildern) einfach ist, da Sie das Aussehen verbessern können (kein rechteckiger Wald!), Wenn Sie Zeit haben und sich auf den spezifischen Quest-Ort konzentrieren .

Grüße

Guillaume

2

Ich würde empfehlen, Ihre Positionsinformationen mit die Indexinformationen für Ihre Speicherdatenstruktur sein, anstatt etwas, das Sie in der Suche nach unten sind. I.E.

int get_terrain_type(int x, int y) { 
    return terrain[x][y]; 
} 

(nicht ganz sicher, das ist nicht das, was Sie wollen, aber ich dachte, dass ich es da draußen setzen würde.)

Verwandte Themen