2012-04-22 5 views
12

Ich arbeite an einigen Grafiken für ein kleines Spiel. Die Grafik wird SVG sein und wird hauptsächlich auf Kacheln basieren (denke Legend of Zelda: Link zur Vergangenheit für SNES). Ich habe ein kleines Grasplättchen gezeichnet und möchte dieses NxM mal über ein ganzes Feld kopieren. Wenn Sie dies in Inkscape oder einem anderen GUI-SVG-Bearbeitungswerkzeug tun, ergibt dies eine Datei, die mehr als 3,5 MB groß ist, größer als eine 32-Bit-Bitmap mit denselben Abmessungen.SVG: Kann ich auf dasselbe Element/dieselbe Gruppe/denselben Pfad verweisen, anstatt es mehrmals zu kopieren?

Ich würde gerne wissen, ob es möglich ist, ein "Gras-Kachel" -Objekt irgendeiner Art zu definieren, und anstatt es auf jeden Punkt in meinem Feld zu kopieren, referenziere es einfach mit den entsprechenden Koordinaten. Ich stelle fest, dass dies immer noch dazu führt, dass die Szene beim Laden die gleiche Menge an Speicher aufnimmt, aber es bedeutet viel kleinere Dateien für die Speicherung auf der Disc, und hoffentlich wird es einfacheres Editieren bedeuten, denn in diesem Fall, wenn ich ändern möchte, zum Beispiel, die Farbe meines Grases, ich muss nur mein archetypisches Objekt ändern, anstatt die Änderung vorzunehmen und dann die neue Kachel über das ganze Feld zu kopieren.

Ich habe etwa ein halbes Dutzend verschiedene Suchen nach verschiedenen Schlüsselwörtern durchgeführt, von denen ich dachte, dass sie helfen könnten, aber nichts scheint zu tun, wonach ich suche. Ich dachte, das 'xlink: href' Attribut zu verwenden, wie ich sehe, wird dies in den Tags verwendet, um zuerst die Farbpalette zu definieren, und dann später in einem separaten Tag, das die Transformationsdaten enthält.

Ich habe versucht, etwas mit wie:

<path id="grassyPatch" d="M 3.3310392e-7,608 31.993091,624 63.986183,608 31.993091,592 z" style="..." />

Und dann, es zu kopieren mit so etwas wie:

<path id="grass-copy1" xlink:href="#grassyPatch" transform="translate(32,-32)" /> <path id="grass-copy2" xlink:href="#grassyPatch" transform="translate(32,-64)" />

etc., um es mehrmals neu zu kopieren Standorte. Ich würde es schätzen, wenn mir jemand sagen könnte, ob das möglich ist. Ich hoffe nicht so weit, also wenn du es auch weißt unmöglich, lass es mich auch wissen, damit ich aufhören kann meine Zeit zu verschwenden.

Danke!

+0

Vergessen Sie auch nicht, dass SVG ein offener Standard ist! [Hier] (http://www.w3.org/TR/SVG10/) ist die genaue, * offizielle * Spezifikation des Formats. Es ist wirklich nicht so schwer zu lesen; ähnlich wie eine API-Dokumentation für ein Dateiformat. – ulidtko

Antwort

35

Sie sind fast da, das Element Sie suchen Kopieren zu tun/Klonen ist <use>

<use xlink:href="#grassyPatch" transform="translate(32,-32)" />

+0

Ausgezeichnet! Das wird sicherlich nützlich sein. Danke für die Hilfe. – Ben

+0

Yea, was ist mit Peeps bekommen gute Antworten und nicht zu akzeptieren? lahm-o! – tim

+0

Hier ist eine nette Anleitung, die das '' Element zeigt: http://taye.me/blog/svg/a-guide-to-svg-use-elements/ –

1

Sie erwähnt haben wollen GUI-Tools zu verwenden, um dies zu erreichen, also wollte ich Ihnen mitteilen können weiß, dass dies in Inkscape möglich ist. Sie müssen das Klonwerkzeug verwenden, das sich in der Symbolleiste neben dem Duplizieren-Werkzeug befindet, oder Sie können Strg-D drücken. Wenn Sie es verwenden, wird der Klon direkt über dem zu klonenden Objekt platziert. Verwenden Sie einfach das Verschieben-Werkzeug, um es an der gewünschten Stelle zu platzieren.

Inkscape verfügt auch über die Option "Optimiertes SVG" im Dateityp-Dropdown-Menü Speichern, mit der Sie die Dateigröße des SVG reduzieren können, indem Sie überflüssige Informationen entfernen und optional die Genauigkeit reduzieren.

+0

Dies ist viel einfacher als das Ändern der XML und mit viel mehr Optionen . Es gibt auch eine große Anleitung hier: http: // www.linuxformat.com/wiki/index.php/Inkscape_-_cloning_and_tiling – Simon

Verwandte Themen