2012-04-22 16 views
12

Pracuję nad grafiką dla małej gry. Grafika będzie SVG i będzie głównie oparte na kafelkach (pomyśl o Legend of Zelda: Link to the Past for SNES). Narysowałem małą trawiastą płytkę i chciałbym skopiować ten NxM razy na całe pole. Robiąc to w Inkscape lub innym narzędziu do edycji SVG GUI, powstaje plik o wielkości ponad 3,5 MB, większy niż 32-bitowa mapa bitowa o tych samych wymiarach.SVG: Czy mogę odwołać się do tego samego elementu/grupy/ścieżki zamiast kopiować go wiele razy?

Chciałbym wiedzieć, czy możliwe jest zdefiniowanie jakiegoś rodzaju "kafelka trawy", a zamiast kopiowania go do każdego miejsca w moim polu, wystarczy odwołać się do niego z odpowiednimi współrzędnymi. Zdaję sobie sprawę, że nadal spowoduje to, że scena załaduje taką samą ilość pamięci po załadowaniu, ale będzie to oznaczać o wiele mniejsze pliki do przechowywania na dysku, i mam nadzieję, że będzie to oznaczać łatwiejszą edycję, ponieważ w tym przypadku, jeśli chcę zmienić, na przykład kolor mojej trawy, muszę tylko zmienić mój obiekt archetypu, zamiast dokonać zmiany, a następnie ponownie skopiować nowy kafelek na całe pole.

Zrobiłem około pół tuzina różnych wyszukiwań różnych słów kluczowych, które moim zdaniem mogły pomóc, ale nic nie wydaje się robić tego, czego szukam. Myślałem o użyciu atrybutu "xlink: href", ponieważ widzę, że jest on używany w tagach do zdefiniowania najpierw palety kolorów, a następnie odwołuje się do niej później w oddzielnym znaczniku zawierającym dane transformacji.

Próbowałem przy użyciu coś takiego:

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

A następnie skopiować go z czymś takim:

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

itp, aby skopiować go kilka razy, aby nowy lokalizacje. Doceń, jeśli ktoś może dać mi znać, jeśli to możliwe. Na razie nie mam nadziei, więc jeśli wiesz, że to jest niemożliwe, proszę daj mi znać, aby móc przestać tracić czas.

Dzięki!

+0

Pamiętaj także, że SVG to otwarty standard! [Tutaj] (http://www.w3.org/TR/SVG10/) jest dokładną * oficjalną * specyfikacją formatu. To naprawdę nie jest takie trudne do odczytania; podobnie jak dokumentacja API dla formatu pliku. – ulidtko

Odpowiedz

35

Jesteś prawie tam, element szukasz zrobić kopiowanie/klonowanie jest <use>

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

+0

Doskonale! To na pewno się przyda. Dzięki za pomoc. – Ben

+0

tak, co z peeps uzyskiwanie dobrych odpowiedzi i nie przejmuj się zaakceptować? lame-o! – tim

+0

Oto ładny przewodnik demonstrujący element '': http://taye.me/blog/svg/a-guide-to-svg-use-elements/ –

1

Wspomniał pan chce korzystać z narzędzi GUI do osiągnięcia tego celu, więc chciałem dać ci wiem, że jest to możliwe w Inkscape. Musisz użyć narzędzia Klonowanie, które znajduje się na pasku narzędzi obok narzędzia Powiel, lub możesz nacisnąć Ctrl-D. Kiedy go użyjesz, klon zostanie umieszczony bezpośrednio na obiekcie, który klonuje. Po prostu użyj narzędzia przesuwania, aby umieścić je tam, gdzie chcesz.

Inkscape ma również opcję "Zoptymalizowany SVG" w rozwijanym menu rozwijanym okna dialogowego Zapisz, co pozwoli zmniejszyć rozmiar pliku SVG, usuwając zbędne informacje, a także opcjonalnie zmniejszając precyzję.

+0

Jest to znacznie łatwiejsze niż zmiana XML i znacznie więcej opcji . Jest tu także świetny przewodnik: http: // www.linuxformat.com/wiki/index.php/Inkscape_-_cloning_and_tiling – Simon

Powiązane problemy