große maps
große maps
Hallo,
jeder kennt so spiele wie Age of Empires oder Die Siedler.
jetzt möchte ich fragen wie man so eine große map in einem PB programm erstellen kann. Sollte ich ein bild nehmen das so groß ist oder sollte ich die map in einzelne felder aufteilen und jedes feld in einer linked list speichern?
Hat jemand noch eine weitere Idee?
Vielen dank im vorraus für eure antworten.
jeder kennt so spiele wie Age of Empires oder Die Siedler.
jetzt möchte ich fragen wie man so eine große map in einem PB programm erstellen kann. Sollte ich ein bild nehmen das so groß ist oder sollte ich die map in einzelne felder aufteilen und jedes feld in einer linked list speichern?
Hat jemand noch eine weitere Idee?
Vielen dank im vorraus für eure antworten.
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping

Nimm ein Array! Linked lists sind bei bspw. 200 x 200 Feldern = 40.000 Elementen zu rechenlastig, Arrays lassen sich 2-dimensional einfach per [x][y] ansprechen. Es macht also Sinn, da ein Array zu nehmen.
Dann basiert das auf Tiles, nicht auf einem Bild. Also ein Tile ist dann vielleicht 32 x 32 Pixel groß und kann unterschiedliche Grafiken haben. Daraus entsteht dann das Spielfeld später. Was du also brauchst ist ein Mapeditor der dir ein Feld in Tiles einteilt und welches man mit Grafiken tileweise bepflanzen kann.
EDIT: Ich hab mal ein Bild meines Mapeditors hier, so kann das dann aussehen: http://derfeind2k.de/daten/mapedit%206.0.png
Die Karte ist in 32 x 32 Pixel große Tiles geteilt und man setzt aus der Grafik links immer so große Stücke auf die Karte rechts. Entstehen kann dann ein recht anschauliches Gesamtbild wenn man die richtigen Grafiken verwendet und diese dann gut zusammen setzt.^^
Dann basiert das auf Tiles, nicht auf einem Bild. Also ein Tile ist dann vielleicht 32 x 32 Pixel groß und kann unterschiedliche Grafiken haben. Daraus entsteht dann das Spielfeld später. Was du also brauchst ist ein Mapeditor der dir ein Feld in Tiles einteilt und welches man mit Grafiken tileweise bepflanzen kann.
EDIT: Ich hab mal ein Bild meines Mapeditors hier, so kann das dann aussehen: http://derfeind2k.de/daten/mapedit%206.0.png
Die Karte ist in 32 x 32 Pixel große Tiles geteilt und man setzt aus der Grafik links immer so große Stücke auf die Karte rechts. Entstehen kann dann ein recht anschauliches Gesamtbild wenn man die richtigen Grafiken verwendet und diese dann gut zusammen setzt.^^
Zuletzt geändert von Ynnus am 02.10.2005 16:10, insgesamt 1-mal geändert.
Solche großen Maps können unmöglich in ein einzellnes Sprite gespeichert werden, das heißt der Speicher würde ziemlich befüllt *gg* ... außerdem gibs doch probleme bei zu großen Sprites ... also wenn diese größer als der Monitor sind ... oder war das nur in verbindung mit ClipSprite(),? Wie auch immer -.-
Die einfachste und sinvollste möglichkeit ist es, zumindest für mich
, ein Tileset zu erstellen und dann das ganze in ein Array zu schreiben.
Array deswegen, weil es einfach schneller ist als Linkedlisten ... dazu denke ich ist die Mapgröße immer bekannt. Wenn du einen Editor dafür machst, wo die Mapgröße nachträglich eingestellt werden soll, wären Linked-Lists eventuell eine möglichkeit, aber selbst dort würde ich eher Arrays verwenden ... halt beim Neudimensionieren dann den Speicher kopieren
.
Aber zum Thema Siedler ... die Maps sind vermutlich noch etwas komplizierter aufgebaut als aus einem Tileset oder einem Sprite. Hier steckt noch einiges an technick drinne ... dabei hab ich aber Siedler 4 noch nie gespielt ... also rede nur von den 1 - 3
.
Aber zurück zu deinem Wunsch. Wenn es etwas mehr seins oll, könnteste das ganze auch in mehrere Ebenen aufteilen, so dass in dem Array(X, Y) auch noch eine Ebene dazu kommt, also Array(X, Y, Ebene). Hierdurch wäre noch ein bischen mehr Spielraum möglich
... aber genug denkanstöße
Da fällt mir ein, das du ja eigentlich von ner Iso-Ansicht sprichst ... da gehört dann noch ein bischen mehr dazu, als ein Array mit daten füllen und diese auslesen
... aber das war ja nicht deine Frage *gg*
MFG PMV
Die einfachste und sinvollste möglichkeit ist es, zumindest für mich

Array deswegen, weil es einfach schneller ist als Linkedlisten ... dazu denke ich ist die Mapgröße immer bekannt. Wenn du einen Editor dafür machst, wo die Mapgröße nachträglich eingestellt werden soll, wären Linked-Lists eventuell eine möglichkeit, aber selbst dort würde ich eher Arrays verwenden ... halt beim Neudimensionieren dann den Speicher kopieren

Aber zum Thema Siedler ... die Maps sind vermutlich noch etwas komplizierter aufgebaut als aus einem Tileset oder einem Sprite. Hier steckt noch einiges an technick drinne ... dabei hab ich aber Siedler 4 noch nie gespielt ... also rede nur von den 1 - 3

Aber zurück zu deinem Wunsch. Wenn es etwas mehr seins oll, könnteste das ganze auch in mehrere Ebenen aufteilen, so dass in dem Array(X, Y) auch noch eine Ebene dazu kommt, also Array(X, Y, Ebene). Hierdurch wäre noch ein bischen mehr Spielraum möglich


Da fällt mir ein, das du ja eigentlich von ner Iso-Ansicht sprichst ... da gehört dann noch ein bischen mehr dazu, als ein Array mit daten füllen und diese auslesen

MFG PMV
ja eigentlich meinte ich ja auch ein array. allein schon das durchsuchen der LL nach den einzelnen koordinaten würde zulange dauern^^.
also dann habe ich ein array mit x und y und den einzelnen flächentypen. jetzt will ich einen teil der karte anzeigen z.B. das oben rechts x26 und y 38 ist. wie mache ich das jetzt am besten? sollte ich alle teile von x26 und y38 einzeln anzeigen oder erst mit einer procedure ein sprite von genau dem feld erzeugen und dann das sprite anzeigen?
also dann habe ich ein array mit x und y und den einzelnen flächentypen. jetzt will ich einen teil der karte anzeigen z.B. das oben rechts x26 und y 38 ist. wie mache ich das jetzt am besten? sollte ich alle teile von x26 und y38 einzeln anzeigen oder erst mit einer procedure ein sprite von genau dem feld erzeugen und dann das sprite anzeigen?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Das könnte intern so aussehen:
Pseudocode:
feld[3][4].tilegrafik_x = 3
feld[3][4].tilegrafik_y = 6
Das beudetet dann, an Position ( 3 | 4) auf der Karte befindet sich die Grafik die auf dem Tileset bei 3 * 32 Pixel und 6 x 32 Pixel ist. An der Stelle 96, 192 wird dann ein 32 x 32 Pixel großes Sprite heraus geclipt und an der Stelle ( 3 | 4) auf der Karte angezeigt. ( 3 | 4) ist am umgerechnet auf Bildschirmkoordinaten 3 x 32 | 4 * 32 Pixel. Dort beginnt dann das Feld und hat das Sprite von 96, 192.
Hoffe das ist soweit verstanden worden.
Pseudocode:
feld[3][4].tilegrafik_x = 3
feld[3][4].tilegrafik_y = 6
Das beudetet dann, an Position ( 3 | 4) auf der Karte befindet sich die Grafik die auf dem Tileset bei 3 * 32 Pixel und 6 x 32 Pixel ist. An der Stelle 96, 192 wird dann ein 32 x 32 Pixel großes Sprite heraus geclipt und an der Stelle ( 3 | 4) auf der Karte angezeigt. ( 3 | 4) ist am umgerechnet auf Bildschirmkoordinaten 3 x 32 | 4 * 32 Pixel. Dort beginnt dann das Feld und hat das Sprite von 96, 192.
Hoffe das ist soweit verstanden worden.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
auch nicht unbedingt schlecht, allerdings würde ich größere grafix nur für objekte nutzen..
die eigentlich map würde ich aus gleichgroßen tiles zusammensetzen (wie in deinem beispiel 32x32)
dann wäre zb. bei
Map(3,4) = 65
an der screenkoordinaten 3*32,4*32 das Tile mit der ID 65
die eigentlich map würde ich aus gleichgroßen tiles zusammensetzen (wie in deinem beispiel 32x32)
dann wäre zb. bei
Map(3,4) = 65
an der screenkoordinaten 3*32,4*32 das Tile mit der ID 65
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
ich hab mich wahrscheinlich falsch ausgedrückt.
also wenn ich auf die mapkoordinate 26 : 38 scrolle ist oben in der linken ecke das tile das im arrayfeld 26 : 38 gespeichert ist. eins weiter rechts ist das tile 27 : 38 usw.
soll ich jetzt vor jedem flipbuffers() jedes einzelne tile zeichnen (das auf dem bildschirm sichtbar ist) oder soll ich nach jedem scrollen einen sprite erstellen auf dem alle tiles sind die man auf dem bildschirm sehen würde und dann das sprite zeichnen?
also wenn ich auf die mapkoordinate 26 : 38 scrolle ist oben in der linken ecke das tile das im arrayfeld 26 : 38 gespeichert ist. eins weiter rechts ist das tile 27 : 38 usw.
Code: Alles auswählen
-------------------------
|26:38|27:38|28:38|29:38|
-------------------------
|26:39|27:39|28:39|29:39|
-------------------------
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
