Freitag, 9. November 2007
und dann die Rechnerei...
Okee... Rechnerei ist vielleicht etwas übertrieben...

Trotzdem, nachdem ich alles augeschrieben hatte, war klar, dass ich etwas BlockOrientiertes machen wollte (Ich habe also eigentlich eine Welt die aus Tiles besteht, die jedoch auch in die Höhe gehen, ne Blockwelt halt)

Und dann war da die nächste grosse Frage:
Bunte Blöcke oder solche mit Texturen?
Ich entschied mich dann für erstere Variante, da ich mich zu dem Zeitpunkt immer noch nicht wirklich mit MDX auskannte und mir bewusst war, dass Texturieren immer so seine Problemchen mitbringt (einfarbige, solide Blöcke tun das zwar auch, aber das ist was anderes )
Nun gut... also... ich will ne Welt aus farbigen Klötzen...
Ich kann ja unmöglich alles hardcoden was diese Welten angeht, das wäre nicht nur unsinnig, sondern auch mit einem Riesenaufwand und massig späteren Schwierigkeiten verbunden, also musste ein Dateiformat her!
Toll... Ein Dateiformat... hmm.. was muss denn da rein? halten wir es vorerst mal möglichst schlank... ein kleiner Header von, sagen wir mal, 50 Bytes und gut ist...
die ersten 12 nahm ich für die Grössenangaben der 3 Dimensionen (1 Ganzzahl = Integer = 32BitInteger = 4 Byte) dann entschied ich mich spontan dafür, einfach mal die Farben der Blöcke speichern zu wollen, warum auch nicht? So kann ich dann entscheiden, was für nen Geländetyp ein Block hat, oder ob er überhaupt existent ist: z.B. ein grüner Block wird Wald oder Wiese verkörpern, blau wird wohl Wasser sein und Schwarz nichts, etc.
Nun... nach langer Rechnerei, wie ich die Blocks am besten speicherte, ob ich einfarbige Blöcke machten sollte oder jede Seite einzeln speichern kam ich zum Entschluss, dass ich einfarbige Blöcke speichertn will!
Mein map-file-Format ist derzeit soweit entwickelt, dass es 3 Bytes/Block benötigt, sowie die ersten 50, die den Header darstellen.
Danach kam die zweite Rechnerei... die relevanten Daten einer solchen Datei in einen 3-Dimensionalen Byte-Array zu überführen...

Das sieht nun so aus:


BinaryReader br = new BinaryReader(new FileStream(fstring, FileMode.Open, FileAccess.Read));
byte[, ,][] ret = new byte[br.ReadInt32(),br.ReadInt32(),br.ReadInt32()][];

byte[] color = new byte[3];
br.BaseStream.Position = 50;

for (int i = 0; i < ret.GetLength(0); i++)
{
for (int i2 = 0; i2 < ret.GetLength(1); i2++)
{
for (int i3 = 0; i3 < ret.GetLength(2); i3++)
{
color = br.ReadBytes(3);
ret[i, i2, i3] = color;
}
}
}
br.Close();
return ret;


Mit dem gegenteiligem Problem, einem kleinen Editor für die Basiskarten, der die entsprechenden Dateien bequem speichern sollte, habe ich mich erst viiel später wirklich befasst, heute um genau zu sein, doch dazu später mehr^^'
Nachdem ich mich für das Dateiformat entschieden hatte und einen entsprechenden Parser gecodet habe, war schon mal ein grosser Schritt getan.

... comment