15

我正在为一个小游戏制作一些图形。图形将是 SVG,并且主要是基于图块的(想想塞尔达传说:SNES 的过去链接)。我画了一个小草砖,想在整个领域复制这个 NxM 次。在 Inkscape 或其他 GUI SVG 编辑工具中执行此操作会生成超过 3.5MB 的文件,大于相同尺寸的 32 位位图。

我想知道是否可以定义某种“草砖”对象,而不是将其复制到我领域中的每个位置,只需使用适当的坐标引用它即可。我意识到这仍然会导致场景在加载时占用相同数量的内存,但这意味着磁盘上存储的文件要小得多,希望这意味着更容易编辑,因为在这种情况下,如果我想更改,例如,我的草的颜色,我只需要更改我的原型对象而不是进行更改,然后在整个字段上重新复制新图块。

我已经对我认为可能有帮助的各种关键字进行了大约六次不同的搜索,但似乎没有什么能满足我的要求。我想使用'xlink:href'属性,因为我看到它在标签中首先用于定义调色板,然后稍后在包含转换数据的单独标签中引用它。

我尝试使用类似的东西:

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

然后用类似的东西复制它:

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

等,以便将其多次复制到新位置。感谢是否有人可以让我知道这是否可能。到目前为止我还没有抱希望,所以如果你也知道这是不可能的,请也告诉我,这样我就可以停止浪费我的时间了。

谢谢!

4

2 回答 2

38

你快到了,你正在寻找复制/克隆的元素是<use>

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

于 2012-04-22T08:34:13.117 回答
3

你提到想要使用 GUI 工具来完成这个,所以我想让你知道这在 Inkscape 中是可能的。您需要使用复制工具旁边工具栏上的克隆工具,或者您可以按 Ctrl-D。当您使用它时,克隆将直接放置在它正在克隆的对象之上。只需使用移动工具将其放置在您想要的位置。

Inkscape 在“保存”对话框的文件类型下拉列表中还有一个“优化的 SVG”选项,它允许您通过删除无关信息以及可选地降低精度来减小 SVG 的文件大小。

于 2012-12-24T03:06:51.017 回答