2012-04-22 15 views
12

Bazı grafikler üzerinde küçük bir oyun için çalışıyorum. Grafikler SVG olacak ve çoğunlukla karo tabanlı olacak (Zelda Legend: SNES için Geçmişe Bağlantıyı düşünün). Küçük bir çini çini çizdim ve bu NxM zamanını tüm alanın üzerine kopyalamak istiyorum. Bunu Inkscape veya başka bir GUI SVG düzenleme aracında yapmak, aynı boyutlarda 32 bitlik bir bit eşlemden daha büyük, 3,5 MB'den büyük bir dosyayla sonuçlanır.SVG: Birden çok kez kopyalamak yerine aynı öğe/grup/yol referans verebilir miyim?

Bir tür bir "çim döşeme" nesne tanımlamak mümkündür ve bunun yerine kendi alanımda her noktaya onu kopyalama, sadece uygun koordinatlarla ona başvuru olmadığını bilmek istiyorum

. Bu durumun, yüklendiğinde aynı miktarda belleği almasıyla sonuçlanacağını biliyorum, ancak diskte saklamak için çok daha küçük dosyalar olacak ve umarım daha kolay düzenleme anlamına gelecektir çünkü bu durumda, eğer değiştirmek istersem, örneğin, otlarımın rengini değiştirmek için değişiklik yapmaktan ve yeni alanı yeniden kopyalamak yerine sadece archetype nesnesimi değiştirmem gerekiyor.

ben yardımcı olabileceğini düşündüm çeşitli anahtar kelimeler için yarım düzine farklı aramalar hakkında yapmış, ama hiçbir şey aradığım şeyi yapmak gibi görünüyor. 'Xlink: href' özniteliğini kullanmayı düşündüğümden, bunun renk paletini tanımlamak için etiketlerde kullanıldığını ve daha sonra dönüşüm verilerini içeren ayrı bir etikette daha sonra görebildiğini düşündüm.

ben gibi bir şey kullanarak çalıştı:

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

Sonra gibi bir şeyle kopyalamak: Yeni bunu birkaç kez kopyalamak için

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

vs. konumları. Bunun mümkün olup olmadığını kimse bana bildirebilirdi. Ben şimdiye kadar umut dışarı tutmuyor değilim, bu yüzden imkansız olduğunu biliyorsan, bana da zamanımı boşa harcayabileyim diye lütfen bilmeme izin ver.

Teşekkürler! Neredeyse geldin

+0

Ayrıca SVG açık bir standart olduğunu unutmayın! [Burada] (http://www.w3.org/TR/SVG10/), biçimin tam * resmi * belirtimidir. Okuması gerçekten zor değil; Bir dosya formatı için bir API dokümantasyonuna çok benzer. – ulidtko

cevap

35

, sen kopyalama yapmak aradığınız elemanı/klonlama <use>

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

+0

Mükemmel! Bu kesinlikle kullanışlı olacak. Yardım için teşekkürler. – Ben

+0

Evet, peep'lerin iyi cevaplar alması ve kabul etmekten rahatsız olmamaları nelerdir? ezik! – tim

+0

İşte '' elemanını gösteren güzel bir kılavuz: http://taye.me/blog/svg/a-guide-to-svg-use-elements/ –

1

Bunu gerçekleştirmek için GUI araçlarını kullanmak isteyen sözü olduğunu, bu yüzden sana bildirmek istedim Inkscape'de bunun mümkün olduğunu bilin. Duplicate aracının yanında bulunan araç çubuğundaki Clone aracını kullanmanız veya Ctrl-D tuşlarına basmanız gerekir. Bunu kullandığınızda, klon doğrudan klonlandığı nesnenin üstüne yerleştirilir. İstediğiniz yere yerleştirmek için taşıma aracını kullanın.

Inkscape ayrıca, Kaydet iletişim kutusunun dosya tipi açılır menüsünde "Optimize edilmiş SVG" seçeneğine de sahiptir; bu, SVG'nin dosya boyutunu küçültmenize, gereksiz bilgileri kaldırarak ve ayrıca isteğe bağlı olarak kesinlik düşürmenize olanak tanır.

+0

Bu XML değiştirmekten daha ve çok daha fazlası seçenekleri ile çok daha kolaydır . Burada da harika bir rehber var: http: // www.linuxformat.com/wiki/index.php/Inkscape_-_cloning_and_tiling – Simon

İlgili konular