![]() |
Mapsystem
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Ich bin derzeit ein Spiel am programmieren und suche im Moment die beste Möglichkeit meine Levels zu speichern. Das ganze soll eine Mischung von RPG und Adventure werden. Und da gibts dann halt ne Menge Räume und in den Räumen stehen Möbel und Tische, Stühle usw und auf den Tischen liegt vielleicht auch etwas, das man eventuell auch aufheben kann usw... Was vielleicht noch nicht unwichtig wäre: Das komplette Spiel findet Indoor statt. Es wird wahrscheinlich keine Levels draußen geben... Ich hätte da auch noch eine zweite Frage: Wie macht man das mit der Kollision... Also generell ja kein Problem aber wenn ich jetzt ne Wand hab dann soll mein Spieler ja nicht kollidieren wenn er mit den Haaren die Wand berührt (das wäre ja wenn er noch 2 Meter von der Wand entfernt steht) sondern halt wenn er direkt davor steht... Hab euch da mal was in den Anhang gepackt... Wie macht man das am besten? Ich benutze die Andorra2D Engine... Gruß Neutral General |
Re: Mapsystem
Es sind zwar noch nicht ganz 24h rum aber ich bin grad kurz daheim.
Findet sich niemand der mir da ein paar Ratschläge geben könnte ? ;) |
Re: Mapsystem
Nimm doch für die Kollisionsprüfung ein kleines Rechteck (oder einen Kreis) um die Füße deiner Figur und nur die Basisfläche der Wand.
|
Re: Mapsystem
Da du kein Stück Code zeigst kann man da nicht viel zu sagen ...
Zur Kollision: Prüfe nicht auf Top des Figurbildes, sondern auf zB Top - Height + 2 oder so bei der Auwärtsbewegeung oder so öhnlich. Damit sollte das gehen. :gruebel: Zur Speicherung ... wie haste denn dei Spielfeld aufgeteilt? MfG freak |
Re: Mapsystem
So wie es OregonGhost vorschlägt wirds normalerweise gemacht. Man nehme das Shape das gezeigt werden soll und Bildchen (Kreis, Dreiek, Schatten der Figur, etc) mit dessen man die Kollosion berechnet, damits einfach bleibt sollte das Bildchen für die Kollision die gleiche größe wie das Mainshape haben.
Zu der Frage des Speichern: Ganz nach belieben! Du solltest dir Vieleicht erstmal Gedanken über die Datenstruktur machen die du in deinem Programm verwendest. Wie du das ganze dann ablegst ist geschmackssache. Zum Beispiel XML oder über einfache textdaten, CVS Tabellen ... ... Gruß Matashen |
Re: Mapsystem
XML finde ich eigentlich nicht schlecht. Du kannst das ja so aufbauen:
Code:
<map>
<tile id="gras" x="0" y="0" z="-1" w="64" h="64"> <object id="baum" x="5" y="5" z="-1"> <object id="vogelnest" /> </object> </tile> <tile id="weg" x="0" y="0" z="-1" w="64" h="64" /> </map> |
Re: Mapsystem
XML hat meiner Meinung nach viel zu viel Overhead. Ich würde mehrere Layer nehmen: Einen Ground-Layer für den Boden, einen Upper-Layer für Objekte auf dem Boden. Diese Layer speicherst du als array of array of Byte (Word, Cardinal) und assoziierst das sie mit einer Grafiktabelle. Darüber kommen dann nur noch Objekte, die sich bewegen sollen als Klasseninstanzen, die du dann serialisiert speicherst.
|
Re: Mapsystem
Zitat:
Zitat:
Viel wichtiger ist die Struktur die du in deinem Programm einbaust. Das Abspeichern...wie gesagt Geschmackssache. Gruß Matthias |
Re: Mapsystem
... und Performancesache. Eine binäre Datei ist schnell interpretiert, bei XML ist das schwieriger und man schleppt noch den Parser mit.
|
Re: Mapsystem
Ok danke für die Antworten. Naja das Problem ist ja wie ich bemerkt habe als ich nochmal drüber nachgedacht habe die Wand vorne... Wobei ich die eigentlich auch weglassen könnte eventuell... weil da würde diese Kollision mit den Füßen ja wieder nicht funktionieren..
Wie ich die Levels abspeichere muss ich mal sehn... Aber ich glaube ich machs nicht mit XML... Wahrscheinlich wirds wieder binär gespeichert - wie auch immer werd ich noch entscheiden... Gruß Neutral General |
Re: Mapsystem
So wie ich Deine Zeichnung interpretiere, dann soll das Spiel Tile-basiert sein (also eine gekachelte Karte). Dann ist Kollision mui einfach. In der Karte wird gespeichert, welche Felder begehbar sind und bei der Bewegung prüfst Du einfach das Zielfeld auf Begehbarkeit. Wenns nicht gekachelt sein soll, dann empfehle ich einen BSP-Tree (binary separated space oder so) wies genau heisst, weiss ich jetzt nicht.
In diesem Baum werden sämtliche Wände eingetragen und man kann für jede Koordinate dann abfragen, ob sie innerhalb oder ausserhalb von Festkörpern ist. Die Abfrage geht auch mui schnell, aber der Baum muss erst 'kompiliert' werden, dadurch eignet er sich nur für statische Räume. Andere bewegte Objekte musst Du dann getrennt auswerten. |
Re: Mapsystem
Ich würde dafür sorgen das jedes Objekt sich selbst serialisieren kann .
|
Re: Mapsystem
das speichern ist eigentlich immer nur Zeit aufwendig.
Für mein Paint2 Programm habe ich einfach 2 speicher Formate entwickelt, dann kann der User einfach über die Datei Endung entscheiden welches Format er haben möchte. zum Kollision Problem: damit habe ich auch immer wieder gerne meine Probleme. zuerst mal die frage 3D oder 2D ? dann müsste man noch wissen wie die Objekte aufgebaut sind, also z.b. so wie ich das verstehe besteht der Player aus unterschiedliche Komponenten Körper, Füße, Kopf oder ist es nur eine einfache 2D Grafik ? wenn ja dann ist das recht einfach bzw. sind es lauter Vierecke ? Wenn ja, könntest du z.b. in einer schleife alle Objekte durch gehen und prüfen ob sie innerhalb der angeben Positionen liegen z.b. so:
Delphi-Quellcode:
das dann als Funktion.
for i:=0 to objCount do begin
if PTinrect(rect(x,y,x+w,y+h),point(x,y); end; Das ist die Grobe Erkennung. Möchtest du aber eine Feine haben ist das ganze schon aufwendiger. Dann musst mit Transparent arbeiten. Ich hatte mal dazu ein Beispiel was mit DelphiX lief..... das kam vom DF glaube ich..... und ich finde XML ist keine Geschmacksache ist es einfach nur viel zu viel zu Pasen. mehr nicht. für ein Spiel ist es einfach ungeeignet meiner Meinung nach, was macht der Paser denn wenn ich ein Level habe mit über 10.000 Objekten drin ? und alle sollen geladen werden ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz