ariogato / Koramu

A selfmade 2D RPG
5 stars 0 forks source link

Collision Detection Parsing #32

Closed ariogato closed 7 years ago

ariogato commented 7 years ago

Einführung: Im Moment können wir uns frei und ungebremst auf der Map herumbewegen wie wir lustig sind. So schön das auch klingt, das darf nicht der Fall sein. Wir müssen den Nutzer auf irgendeine Art und Weise daran hindern, durch Wände oder andere feste Objekte laufen zu können. Zu diesem Zweck nutzen wir das Prinzip der Kollisionsboxen.

In den .tmx-Dateien können Kollisionsboxen (Im Grunde sind das nur Rechtecke bzw. Position, Breite & Höhe) zu bestimmten Tiles in ihrem jeweiligen Tileset spezifiziert sein. Zu einer TileId können mehrere Kollisionsboxen angegeben sein!

Aufgabe: Das Muster der Kollisionsboxen in den .tmx-Dateien sieht folgendermaßen aus:

<tileset [...]>
  [...]
  <tile id="96">
   <objectgroup draworder="index">
    <object id="1" x="28" y="0" width="36" height="64"/>
   </objectgroup>
  </tile>
  <tile id="431">
   <objectgroup draworder="index">
    <object id="1" x="9" y="35" width="53" height="27"/>
    <object id="2" x="20" y="0" width="42" height="32"/>
    <object id="3" x="8.90909" y="20.5455" width="40.7273" height="13.4545"/>
    <object id="4" x="13.2727" y="7.45455" width="22.1818" height="13.4545"/>
   </objectgroup>
  </tile>
</tileset>

Hierbei ist <object/> die Box.

Diese Informationen müssen nun vom MapParser in die jeweiligen Tilesets geladen werden. Wie diese Informationen am Besten gespeichert werden sollten weiß ich nicht.

Anmerkung: Später werden durch diese Informationen sowohl der Rendervorgang, als auch der Updatevorgang beeinflusst. Ferner werden mit einem ähnlichen Algorithmus alle Animationen für bestimmte Tiles geparst. Folglich heißt das für denjenigen, der dieses Ticket hier bearbeitet, dass er sich Gedanken um die Speicherstruktur machen muss.