Seite 1 von 2
Isometrische Tile Engine
Verfasst: 05.06.2007 20:41
von Vermilion
Muhaha, ich habe dieses letztens wieder ausgegraben und neu angefangen! Und siehe da!
Es funktioniert einwandfrei! Fertig!
Der Code ist für alle, könnt ihn meinetwegen auch an euren Hund verfüttern, hauptsache unkommerziell.
Download
72 KB
Enthält:
- Quelltext (184 Zeilen)
- Kompiliertes Executable
- Die 3 notwendigen Grafiken
- Screenshot
Verfasst: 05.06.2007 21:12
von Zaphod
kleine Anregung zum überzeichenproblem:
- Böden werden nie etwas verdecken, also weißt du schon einmal, dass du die alle zuerst zeichnen musst.
- im zweiten durchlauf schaust du für jedes Feld ob darauf eine Wand steht... steht da eine Wand dann ist da kein anderes Objekt und du zeichnest einfach die Wand... steht da keine Wand schaust du nach, ob darauf ein Objekt (zb deine Spielfigur steht). Ist dem so dann zeichnest du einfach dein Objekt an der stelle.
Wenn du von hinten (also der spitze deines levelbereiches) zeichnest und immer schön reihe für reihe, dann erledigt sich die richtige reihenfolge ganz von selbst und figuren die von Wänden überdeckt werden sollen werden automatisch überdeckt.
Jetzt fragst du dich sicher, wie du das dann handhabst, wenn eine figur auf zwei feldern gleichzeitig steht (weil sie grade in bewegung ist) oder weil deine Figuren größer sind als Felder... da gäbe es verschiedene herangehensweisen, aber die einfachste ist, die Figur für jedes Feld auf dem sie steht neu zu zeichnen (natürlich mit entsprechend angepassten offset, du willst ja nicht das deine Figur da plötzlich viermal steht).
Alles andere erledigt sich dann ganz von alleine.
Verfasst: 06.06.2007 18:30
von Vermilion
Naja, ich weiß ja nicht, ob du es dir angeschaut hast, aber ich zeichne vom oberen Punkt (die karte hat die Form eines einzelnen Tiles, um es mal so zu beschreiben), oder anders gesagt von hinten, Reihe für Reihe nach vorne. Somit ist das eigentlich schon klar. Ich werde mich wahrscheinlich am Wochenende nochma damit beschäftigen, mir der Koordinatenberechnung der Spielfigur.
Und die Wände stehen in diesem Fall schon auf dem Boden Tile.
Verfasst: 06.06.2007 18:37
von Zaphod
Das aufteilen in zwei durchgänge (erst böden, dann wände und figuren) ist in jedem fall die variante, die am wenigsten rechenzeit verbraucht um die überzeichnungen zu handhaben.
Eine andere variante die man machen könnte wäre soetwas wie ein z-puffer, aber davon rate ich dringend ab, dass ist auf jeden fall deutlich aufwändiger und auch deutlich langsamer.
Verfasst: 06.06.2007 18:57
von Vermilion
Alles klar.

Verfasst: 06.06.2007 21:35
von ZeHa
Naja es gibt noch die Lösung daß man eine Priority Queue verwendet (also als Z-Buffer-Ersatz), dann kann man sogar komplett 3dimensionale Levels bauen. Dann muß man auch nicht von Hand in zwei Layer oder sowas aufteilen (das ist ja dann schon wieder recht spezifisch) sondern hat alle Freiheiten und kann mehrere Objekte stapeln und auch Brücken oder Stockwerke bauen etc.
Bin da auch grad am Basteln, allerdings in C++, trotzdem kannst Du mich natürlich anschreiben wenn Du Fragen haben solltest. Solange Du aber sicher weißt, daß Deine Levels nur 2dimensional sind (und eben nur leicht 3dimensional angezeigt werden), kannst Du natürlich so weitermachen wie bisher. Es gibt noch so 'ne Art Zwischenlösung, indem Du jedes Tile eben als Würfel machst und dann eine Höhe zuweist. Dann kannst Du z.B. Levels machen, die nach hinten hin immer höher werden, was auch ein bißchen mehr 3D mit reinbringt. Allerdings hast Du trotzdem keine Brücken oder sowas, aber Du kannst immerhin wie gewohnt von hinten nach vorne zeichnen. Nur mit den Figuren mußt Du halt aufpassen, aber das mußt Du eh in jeder Variante

Verfasst: 07.06.2007 18:32
von Vermilion
Jop, ich will auch in 2D blieben. Soll sich alles in einem "Stockwerk" abspielen und grafisch ist das kein Problem.
Ich glaub ich mach ein paar Terrains und "Screenshotte" die mit der Irrlicht Engine und dann habe ich schon mal eine hübsche Hintergrundkulisse (Jedenfalls besser als selber pixeln

).
PS: Heute schrieben wir Deutscharbiet. Und da ich mir die Lektüre, die wir schon über Ostern lesen sollten, nicht gekauft habe (und laut Lehrerin, die das nicht weiß, gut bei diesem Thema mitgearbeitet habe) konnte ich die erste der 2 Stunden rummalen im Heft. Ich überlegte mir, wie ich das(?) Tile berechne, auf dem der Spieler steht. Nach 40 Minuten fiel mir ein, ich kann in der Zeichenschleife der Tile Engine einfach die Pixelkoordinaten für jedes Tile abgleichen mit den Koordinaten der Mitte des Screens.
Naja, jedenfalls, konnte ich mir dann in der 2. Stunde das Buch vom Nachbarn ausleihen und erzielte doch noch ein relativ gutes Ergebnis.

Verfasst: 07.06.2007 18:45
von Zaphod
Das ist eigentlich verhältnismäßig einfach.
Ich kann wenn bedarf besteht den Quellcode meines Iso Editors posten, da ist die Map nach Isokoordinaten und die Isokoordinaten nach Mapkoordinaten berechnung schon gelöst.
Werde ich aber frühestens am Wochenende machen.
Wenn du dir eine gezeichnete IsoMap anschaust, versuche dahinter zu kommen, wie eine Formel aussehen würde die du verwenden würdest um die Tiles einzeln aus Pixel zeichnen würdest, für die x und für die y koordinate. Wenn du das hast, ist das Problem fast schon gelöst.
Die Iso nach Map Umrechnung bekommst du dann einfach durch Umstellung der beiden Formeln.
Verfasst: 07.06.2007 20:40
von Vermilion
Ok
Verfasst: 07.06.2007 20:45
von PureBasic4.0
sehr stabil läuft das prog auch irgendwie nicht. du musst es nur einmal kurz in den Hintergrund verbannen und schon stürzt es ab.
Trotzdem: Gute Arbeit!
