JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=b3239b464058801e7efea2c80635f26eMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Maps verwalten

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 03.04.2006, 16:18    Titel: Maps verwalten Antworten mit Zitat

Das Thema ist schon in meinem vorherigen Topic erwähnt worden, bloß es passte nicht alzu sehr zum thema also mache ich mal ein neues auf...

Also ich benutzte tiles um eine map zu erstellen, klapt auch alles. Die initialisierung der map erfolgt in meiner spieleschleife, da wurde mir gesagt das ist unefizient, ich sollte das außerhalb initialisieren.
Also habe ich das nach außen gepackt bloß ich brauche drei oder vier maps, wie initialisiere ich die sofort am anfang ohne das die vorherige map verloren geht, so das ich während meines Spiel zwischen den maps echseln kann?
Irgendwie müßte ich doch die maps am anfang initialisieren können und sie zwischenspeichern um so auf jede einzeln zugreifen zu können, wie könnte ich das machen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 03.04.2006, 16:30    Titel: Antworten mit Zitat

Hallo
Du könntest alle Tiles in einen vector packen und dann die vectoren in einen Array oder je nach dem in einen weiteren Vector packen. Dann kannst du während des spiels immer auf alle zugreifen.

Aber ich denke du kannst die maps schon in der Spielschleife initialisieren nur nicht jedes mal wenn sie durchläuft also etwa so:

CPP:
while(prog nicht beendet)
{
    if(map ist nicht initialisiert)
    {
        Initialisieremap()
        map_initialisiert = true;
    }
}
[/code]
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dragon
Super JLI'ler


Alter: 38
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 03.04.2006, 16:38    Titel: Antworten mit Zitat

oder du machst das So:
CPP:
// 4 Maps erstellen
Map maps[4] = {"start.map", "hölle.map", "stand.map", "summer.map"};
int cur_map = 0;

// Spielschleife
while(programm noch am laufen)
{
  // Map aktualisieren
  maps[cur_map].update();
  // und rendern
  maps[cur_map].render();
}

du kannst das natürlich auch mit zeigen machen
_________________
Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 03.04.2006, 16:52    Titel: Antworten mit Zitat

51m0n hat Folgendes geschrieben:
Hallo
Du könntest alle Tiles in einen vector packen und dann die vectoren in einen Array oder je nach dem in einen weiteren Vector packen. Dann kannst du während des spiels immer auf alle zugreifen.

Aber ich denke du kannst die maps schon in der Spielschleife initialisieren nur nicht jedes mal wenn sie durchläuft also etwa so:

CPP:
while(prog nicht beendet)
{
    if(map ist nicht initialisiert)
    {
        Initialisieremap()
        map_initialisiert = true;
    }
}
[/code]


Deine idee gefällt mir gut, die mit der Spieleschleife werde sie auch verwenden, zur zweiten antwort, ja so habe ich mir das vorgestellt, bloß ich müßte vom DirectX code her die maps vorher initialisieren und irgendwo zwischen speichern und damit komme ich nicht klar, das geht ja schon in richtung level editor, bloß ich weiß auch nicht wie man so ein 2D Leveleditor programmiert, das ist mein Hauptproblem...
Ist das den überhauptmöglich die maps irgendwie alle sofort zu initialisieren und irgendwo zwischen zu speichern und sie von dort aufzurufen, kenne mich nämlich in DirectX noch nicht so gut aus...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 03.04.2006, 17:12    Titel: Antworten mit Zitat

Nun ja du kannst eine Datei erstellen wo alle Tiles und ihre positionen drinstehen. Diese list du dann ein und Speicherst sie in einem Vector oder Array. Dann zeichnest du die Tiles anhand ihrer Koordinaten die du auch gespeichert hast. Hier ist mal ein kleiner Beispiel Code so wie ich das meine:

CPP:
struct Map
{
    std::vector<Tile> Tiles;
};

struct Tile
{
    std::string name;
    int x;
    int y;
};

void ZeichneMap(Map map)
{
    for(int i = 0; i < map.Tiles.size(); i++)
    {
        DrawTile(map.Tiles[i].name, map.Tiles[i].x, map.Tiles[i].y);
    }
}

Map LadeMap(std::string mapname)
{
    Map map;
    lesealledaten aus mapname speichere diese in map();

    return map;
}

int main()
{
    Map CurrentMap;

    while(pro nicht beendet)
    {
        if(map is noch nicht initialisiert)
        {
            CurrentMap = LadeMap("erstemap.map");
        }
        else
        {
            ZeichnerMap(CurrentMap)
        }
    }

    return 0;
}


So ist jetzt nur ne kleine Anregung und hat noch viele verbesserungsmöglichkeiten. zB. Nur Die Tiles zeichnen die sich auch sichbar sind. Aber so kannst du immer mit der Funktion LadeMap() eine bestimmte map laden wenn du willst.
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 03.04.2006, 17:39    Titel: Antworten mit Zitat

51m0n hat Folgendes geschrieben:
Nun ja du kannst eine Datei erstellen wo alle Tiles und ihre positionen drinstehen. Diese list du dann ein und Speicherst sie in einem Vector oder Array. Dann zeichnest du die Tiles anhand ihrer Koordinaten die du auch gespeichert hast. Hier ist mal ein kleiner Beispiel Code so wie ich das meine:

CPP:
struct Map
{
    std::vector<Tile> Tiles;
};

struct Tile
{
    std::string name;
    int x;
    int y;
};

void ZeichneMap(Map map)
{
    for(int i = 0; i < map.Tiles.size(); i++)
    {
        DrawTile(map.Tiles[i].name, map.Tiles[i].x, map.Tiles[i].y);
    }
}

Map LadeMap(std::string mapname)
{
    Map map;
    lesealledaten aus mapname speichere diese in map();

    return map;
}

int main()
{
    Map CurrentMap;

    while(pro nicht beendet)
    {
        if(map is noch nicht initialisiert)
        {
            CurrentMap = LadeMap("erstemap.map");
        }
        else
        {
            ZeichnerMap(CurrentMap)
        }
    }

    return 0;
}


So ist jetzt nur ne kleine Anregung und hat noch viele verbesserungsmöglichkeiten. zB. Nur Die Tiles zeichnen die sich auch sichbar sind. Aber so kannst du immer mit der Funktion LadeMap() eine bestimmte map laden wenn du willst.


Also habe alles soweit verstanden, bloß deinen anfang verstehe ich nicht so ganz....
"Nun ja du kannst eine Datei erstellen wo alle Tiles und ihre positionen drinstehen."
Wie meinst du das? ich besitzte bereits eine funktion die ein zweidimensionales array wo angegeben wird welches tile an welche position hingehört zeichnet.
Meinst du das?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 03.04.2006, 17:47    Titel: Antworten mit Zitat

Das war mehr auf den Leveleditor bezogen. Du schreibst ein Programm was den namen und die position (und vieleicht noch andere wichtige daten) in eine Datei schreibst und diese dann in deinem game ausliest.

Hat dir denn mein kleines Codebeispiel was genützt?
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 03.04.2006, 17:55    Titel: Antworten mit Zitat

Ja ist dir richtig gelungen, müsste eigentlich so klappen....

Danke ist richtig gut geworden.

Was ich noch wissen wollte dein Code Beispie bezieht sich aber nicht auf den Leveleditor, oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 03.04.2006, 18:00    Titel: Antworten mit Zitat

Ne das CodeBeispiel bezieht sich auf das game.

Die Methoden LadeMap() und ZeichneMap() kann man in abgewandelter Form auch bei dem Editor benutzen.
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 03.04.2006, 20:57    Titel: Antworten mit Zitat

Was auch noch möglich wäre: Du brauchst gar nicht in der Hauptschleife abzufragen, ob die Map initialisiert ist. Du kannst genauso gut z.B. eine bestimmte Taste mit diesem Ereignis belegen oder das anderwertig tiefer ins Programm einbauen. Der positive Effekt dabei ist, dass deine Hauptschleife nicht durch sinnloses Abfragen belastet wird, wenn es vielleicht gar nicht nötig wäre. Klingt zwar vielleicht pedantisch, aber so kannst du schon mal eine if-Anweisung sparen.
Ich nehme an, damit deine Spielwelt eine Grenze hat, musst du sowieso abfragen, ob der Spieler direkt am Rand einer Map steht oder nicht. Wenn er dort steht (und das wird statistisch gesehen sehr selten der Fall sein) - nur dann - würde ich abfragen, ob er die nächste Map laden soll.
Steht der Spieler nun in der Mitte der Map und es steht sowieso kein Mapwechsel in Aussicht, wird gar nicht erst die Map abgefragt Wink

/verschoben nach Entwicklung - mit DirectX hat das ja wenig zu tun Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 09.04.2006, 16:03    Titel: Antworten mit Zitat

Ich denke nicht dass du bei jedem Bild eine andere Map brauchst? Eher in jeder Runde. Dann nimm einen Vektor und klopp ihn leer und lad ihn neu mit was anderem beim Mapwechsel.
Sonst brauchst du ja ewig viel Speicher, oder?
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum