XNA, wie speichern und zeichnen Sie eine 2d-Karte?
Ich habe ein problem und ich bin nicht sicher, wie der Ansatz der Lösung.
Ich brauche ein 2D-map-editor für mein XNA-app., mit eine bestimmte Anzahl von Fliesen.
Sagen eine Karte 50x100 Fliesen.
Ich bin nicht sicher, was an der Struktur der Daten für die map -, Fliesen-und wie um es zu speichern auf der Festplatte für die spätere Verladung.
Was ich jetzt denke ist dies. Ich werde speichern, die Karte in einer text-Datei, etwa so:
//x, y, ground_type, object_type
0, 0, 1, 0
0, 1, 2, 1
wobei 0=Gras, 1=Fluss etcc für Boden-Gelände, und 0=Nichts, 1=Wand für Objekt-Typen.
Dann habe ich ein Spiel-Komponente Map-Klasse, die Lesen können, die Datei oder erstellen Sie eine neue von Grund auf neu:
class Map : DrawableGameComponent {
//These are things like grass, whater, sand...
Tile ground_tiles[,];
//These are things like walls that can be destroyed
Tile object_tiles[,];
public Map(Game game, String filepath){
for line in open(filepath){
//Set the x,y tile to a new tile
ground_tiles[line[0], line[1]] = new Tile(line[3])
object_tiles[line[0], line[1]] = new Tile(line[4])
}
}
public Map(Game game, int width, int heigth){
//constructor
init_map()
}
private void init_map(){
//initialize all the ground_tiles
//to "grass"
for i,j width, heigth{
ground_tiles[i,j] = new Tile(TILE.GRASS)
}
public override Draw(game_time){
for tile in tiles:
sprite_batch.draw(tile.texture, tile.x, tile.y etc..)
}
Meine Tile-Klasse wird es wohl NICHT sein ein Spiel-Komponente.
Ich bin noch nicht ganz sicher, wie Sie Sie zu behandeln Kollisionserkennung zum Beispiel zwischen einer Kugel, die aus der Spieler mit dem map-Objekt. Sollte das behandelt werden, indem Sie die Map-Klasse oder eine Art super-Manager-Klasse?
Alle Hinweise sind willkommen.
Danke!
InformationsquelleAutor drozzy | 2009-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht einfach speichern Sie es als:
Etwas geben wie
Es ist leichter und kompakter. 🙂 Als für den in-game Speicher, einem 2D-array ist ideal für diese, es sei denn, Sie haben andere Bedürfnisse. Eine typische Kollision-detection-Technik ein breites phase erfolgt durch einen der Physik-subsystem, mit bounding spheres) oder Achse (axis-aligned bounding boxes zum Beispiel, und dann haben die Paare von möglicherweise kollidierenden Objekten zu berechnen, wenn es in der Tat eine Kollision.
Ihre tile-Klasse sollte wohl nicht sein, eine Komponente, es sei denn, Sie haben einen sehr triftigen Grund.
Edit: habe Vergessen den Objekt-Typ da oben, aber es wäre einfach zu integrieren es auch.
InformationsquelleAutor jfclavette
Vielen Dank, aber ich beschloss, auf (ground_type, object_type) Paare.
So eine Eingabedatei wie
mit Zuordnungen wie:
BODEN = {0:gras 1:Straße}
OBJEKTE = {0:keine, 1:Kiste}
und die Breite=2, Höhe=2 der Karte wird Produkt die folgenden:
Zugegeben, ich habe zu wissen, die Breite/Höhe der Karte, um den Sinn der Datei. Ich könnte, dass in der input-Datei als gut.
InformationsquelleAutor drozzy