Isometrische Tile Engine

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Isometrische Tile Engine

Beitrag 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.

Bild

Download
72 KB

Enthält:
- Quelltext (184 Zeilen)
- Kompiliertes Executable
- Die 3 notwendigen Grafiken
- Screenshot
Zuletzt geändert von Vermilion am 26.10.2007 12:32, insgesamt 6-mal geändert.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag 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.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Alles klar. :)
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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 ;)
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag 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. :)
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Ok
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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! :allright:
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Antworten