Karteneditor (Tile Based)



  • Ich habe eine zweidimensionale Karte als ein Array. Nun habe ich folgende Tiles:

    http://img140.exs.cx/img140/9862/tiles1jc.th.png

    Im Karteneditor sind alle Tiles am Anfang "Rasen". Setze ich nun ein Wassertile, soll der Karteneditor anhand der Nachbartiles das passende Wassertile und Rasentile heraussuchen. Jede Kombination in einer IF-Abfrage zu berücksichtigen wäre wahnsinnig umständlich. Es muss doch eine Möglichkeit geben diesen Ablauf einfacher zu realisieren.

    ein kleines Beispiel, welche Tiles beim Setzen eines Wassertiles am linken Rand gesetzt werden müssen:

    http://img140.exs.cx/img140/8329/beispiel1mo.png



  • Ich würde Masken verwenden also Schwarz/Weiß und die dann mit den jeweiligen Bitmaps multiplizieren so braucht du nur einmal die Übergangsmasken zu malen und du kannst dann einfach anstatt viele Wasserübergänge mit verschiedenen anderen Materialien nur ein volles Wasserbitmap ohne Übergänge malen.. Daselbe gilt dann natürlich auch für andere Materialien was viel Zeit spart. Ausserdem kannst du viel schneller neuere Materialien einfügen oder auch einfach aus ner Sommerlandschaft ne Winterlandschaft produzieren usw.


  • Mod

    du mußt die tiles über bits indizieren die du anhand der nachbartiles bestimmst.

    du hast also

    enum TILEID
    {
       TI_RASEN=0,
       TI_WASSER=1,
       TI_SAND=2
       TI_IRGENDWASANDERESWEILNOCHPLATZIST
    };
    

    dann bestimmst du das zu zeichnende tile über

    TILEID TileId = (m_Map[x-1][y-1]<<0) | (m_Map[x  ][y-1]<<2) | (m_Map[x+1][y-1]<<4) |
                    (m_Map[x-1][y  ]<<6) | (m_Map[x  ][y  ]<<8) | (m_Map[x+1][y  ]<<10) |
                    (m_Map[x-1][y+1]<<12)| (m_Map[x  ][y+1]<<14)| (m_Map[x+1][y+1]<<16);
    

    du mußt die tiles natürlich entsprechend erstmal sortieren, aber dann läuft es relativ einfach die IDs zu berechnen

    rapso->greets();

    noch irgendwas verständlcih? *Hehe*


Log in to reply