Hallo,
Ich hatte es ja oben geschrieben, das dieses Microsoft Paket benötigt wird.
Die Tile Auflösung ist fix auf 32x32.
Hallo,
Ich hatte es ja oben geschrieben, das dieses Microsoft Paket benötigt wird.
Die Tile Auflösung ist fix auf 32x32.
Ich hab mir das Map Format mal angeschaut. Ist noch ein wenig "unschön" gelöst, wie man es auch an der Dateigröße merkt. Damit meine ich vorallem die 500er Map.. die knapp 1MB groß ist. 100 Maps == 100MB? Ich weiß das wäre eher der worst-case, aber schau dir als gutes Beispiel mal das Tiled .tmx (eigentlich .xml) Format an. Tiled Map Editor. Dort wird zlib Kompression + base64-encoding verwendet. Anstatt also:
im klartext zu speichern könntest du folgendes machenZitat
Um die Map zu erhalten dann sowas wie:Zitat
Zip die Map mal, dann siehst du wieviel du in etwa verschwendest. 994kb werden auf ca. 6kb komprimiert.Zitat
Falls du aus irgendeinen Grund nicht darauf verzichten willst, würde ich trotzdem einige Dinge überdenken. Sowas wie:
Jeder char im xml Bezeichner ist mal fünfhundert = 500 Byte Verschwendung. Auch das Attributte "Tiles" ist unnötig. Den Tile IDs String kann man auch als value speichern. Also eher sowas wieZitat
Bei AnimationDatabase.xml ist es ähnlich.Zitat
Anstatt jedesmal ein neuen Tag für die Framezeit zu beginnen könntest du ein int array mit [index] = frametime Wertepaaren verwenden. Außerdem könntest du default-werte einführen. Werte wie posX="0" posY="0" scale="100" rotation="0" opacity="100" braucht man nicht zu speichern, wenn es sie als default gibt. Daraus wird dann sowas wie:Zitat
Die Frame zeiten werden dann mit frame_times[sprite.t] ausgelesen.Zitat
Na ja, das viel mir so auf. Hab mir aber auch nicht alles angeschaut.
Bei den Maps bin ich mit dir einer Meinung, diese wollte ich auch in Zukunft zipen.
Bei den Animationen machst du allerdings den Fehler zu denken, man hat nur ein Sprite pro Frame. Denn genau aus diesem Grund gibt es diesen Tag, damit mehrere Sprites pro Frame benutzt werden können.
Von den default Werten bin ich kein Freund.
Aber ich freue mich, das du dir das mal angeguckt hast, auch wenn ich im Moment wenig Zeit habe, daran weiter zu arbeiten![]()
Ist halt XML, da ist doch Speicherplatzverschwendung und Tag-Bloat by Design.
Nimm JSON, dann sparst du schon mal alle schließenden Tags ^^
Nachtrag:
Solche Optimierungen sollte man übrigens erst machen, wenn das Programm weitesgehend steht. Erstmal alles sauber programmieren und dann schauen was man optimieren kann.
Ist auch der Weg, den ich im Moment gehen möchte. Erstmal muss es funktionieren
Ob ich dann letztendlich xml oder json oder komplett binary mache, ist reine fleiß arbeit.
Finde ich nicht, es handelt sich schließlich nicht um eine micro Optimierung sondern um grundlegende Dinge. Es geht mir nicht speziell um das zippen, sondern um das richtige planen von XML Formaten.
Ein Programm das so datenabhängig wie ein Game Maker ist, viele Baumstrukturen & Objekte, lebt von gut definierten Formaten.
Ich kann mir z.B. überhaupt nicht vorstellen warum man die gesamten Tiles einzeln speichern will. Sowas wie "Textures/high-grass/" bottom, top, left, right.
Es ist nicht nur umständlich zu importieren, sondern auch schwer zu bearbeiten. Was wenn ich das Gras umfärben möchte? Muss ich dann alle Dateien einzeln bearbeiten? Sowas löst man normalerweise mit Tilesets/Spritesheets.. was auch meist der Render Performance zugute kommt, da man auf kostbare Texturewechsel in Spritebatches oder ähnliches verzichten kann. Auch das indizieren und cachen fällt leichter.
Mir sind beim durchschauen noch einige Sachen ins Auge gefallen.Für sowas sind XML-Attribute nicht geeignet. Es handelt sich um ein Int-Array. Wieso also nicht:Zitat
Zitat
Der Prototype Tag ist plötlich auch ein Rectangle? Wieso nicht einen extra Tag einführen?Zitat
Ich wette man wird an anderer Stelle ebenfalls ein Rectangle als Bounding Box benötigen, jedoch ohne animationSpeed oder scriptName Attribut.Zitat
Unnötig lange Bezeichner..
Man sieht doch im Tag dass es sich um eine AnimationInfo handelt, das "animation" innerhalb der attribute ist also unnötig.Zitat
Solche doppelt und dreifach Bezeichner fallen beim lesen von code eher negativ auf. sprite.spritePosition.spriteX.. ihh.Zitat
x0y0 usw. Kann man auch als Matrix speichern.Zitat
Den Bezeichner prototype finde ich etwas fragwürdig. Es handelt sich um ein Tile, wieso also nicht <tile>. Hier könnte man auch einige Dinge anders machen um zukünftige Probleme zu vermeiden.Zitat
Als Beispiel. Etwas mehr OOP im Design. Der <collision type="solid"> Tag ist dann für alle möglichen Kollisionsdaten definiert und kann für andere Objekte wiederverwendet werden. So könnte ein Sprite ebenfalls den Tag verwenden. Es ist auch übersichtlicher wenn man die Daten weiter runterbricht.Zitat
Aber nun gut, muss man ja alles nicht so genau nehmen. Mach wie du lustig bist, sollte nur eine kleine Anregung sein![]()
Geändert von XRPG (10.08.2013 um 14:21 Uhr)
Ich verweise mal darauf, dass das ganze hier open source ist, und wenn du lust hast, durchaus mir deine Änderungen zukommen lassen kannst
Ansonsten, klar bin ich froh, wenn man mir ein paar Anregungen gibt
mfg
Open Source? Also irgendwie sind mir die Links zu Google Code, GitHub oder SourceForge entgangen. Wo wird das Projekt denn gehostet?
Ehrlich gesagt kenn ich mich aber auch zu wenig mit Qt aus um etwas beizusteuern.