-
Krieger
Wenn die ganze Map ein großes Bitmap ist, bekommst du Probleme mit der Höhe/Tiefe der Events auf der Map. Ein Baum beispielsweise sollte für Events, die davor stehen, einen geringeren Z-Wert haben als für Events die dahinter stehen. Du kannst aber nicht einem Map-Layer mehrere Z-Werte zuordnen. Dafür müsstest du ihn schon in einzelne Streifen zerlegen.
-
Ehrengarde
ja das stimmt, dabei hast du natürlich recht, ich vergas zu erwähnen, dass mich der Z-Wert der Tiles in meinem Project nicht interessiert, beziehungsweise sie gar keinen besitzen.
Nun, da ich diese neue Information nachgereicht habe, denkst du (oder auch andere Mitglieder welche unserer Unterhaltung folgen) dass die von mir beschriebene Methode die Performance verbessern würde?
-
Krieger
Ich denke wenn die Map ein riesiges Bitmap ist, müsste es recht effizient sein. Das kommt aber auf die Implementierung der RGSS an. Ich könnte mir z.B. vorstellen, dass die RGSS versucht ihre Bitmaps in der Grafikkarte zwischenzuspeichern. Und die hat nur begrenzt viel Arbeitsspeicher. Wenn das der Fall ist, könnte es bei Grafikkarten mit weniger Arbeitsspeicher effizienter sein, die Map als Mosaik einzelner großer Bitmaps (die durchaus auch größer als der Bildschirm sein können) darzustellen. Denn dann müssen im Ernstfall maximal 4 kleinere Bitmaps gleichzeitig angezeigt werden, was evtl. weniger Speicher kostet als ein großes. Aber ob dem wirklich so ist, musst du ausprobieren.
-
Ehrengarde
Vielen Dank, völlig befriedigende Antwort darauf.
Nun noch einmal zu meiner ersten Frage, stimmts du zu, dass es die beste Methode sei ein einziges Array zu verwenden in welchem alle Tiles gespeichert sind? (Tile speichern in dieser Hinsicht nicht die Bitmaps oder stellen Sprites dar, sondern beinhalten weitere Spieltechnisch wichtige Informationen)
Eine Art, Zweidimensionales Array Marke Eigenbau?
-
Krieger
Ich persönlich finde ein eindimensionales Array eleganter. In einem Array aus Arrays ist der Zugriff vielleicht etwas einfacher, aber es lässt sich nicht so schön iterieren.
Die Frage ist eher, ob du wirklich ein Array aus Tile-Objekten verwenden solltest. Vor allem in Ruby 1.8 werden Objekte sehr ineffizient im Speicher abgelegt. Effizienter wären vermutlich einfach mehrere Arrays die jeweils ein Tile-Attribut enthalten. Am effizientesten ist es natürlich, wenn du die Klasse Table der RGSS nutzt. Mit der kannst du auch zweidimensionale Arrays hocheffizient abspeichern. Das Problem: Die Klasse darf nur Fixnum-Werte abspeichern. Du kannst also keine Strings oder andere Objekte darin hinterlegen.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln