3个不稳定版本
0.2.0 | 2021年8月3日 |
---|---|
0.1.1 | 2021年1月4日 |
0.1.0 | 2020年10月10日 |
#757 in 游戏开发
225KB
398 行
Bevy SVG map
用于将SVG文件直接加载到bevy的Crate。线条的属性(颜色、不透明度、填充等)可用于编程添加功能,为一个非常奇怪的 workflow 奠定基础:矢量图形作为bevy实体的编辑器!
如果您正在寻找一个加载SVG的插件,您可能想看看 bevy_svg。
入门
将库添加到项目的 Cargo.toml
(检查最新发布的版本,它与分支 crates.io
上的稳定版本相对应)
[dependencies]
bevy_svg_map = "0.2"
如果您想要前沿技术(对应于 master
)
[dependencies]
bevy_svg_map = {git="https://github.com/carrascomj/bevy_svg_map.git"}
⚠️ master分支指向每个 bevy 的 master 分支。请谨慎使用!
该库提供了一个函数,可以在bevy的启动系统中使用。这里,我们在 assets/
目录下加载了文件 ex.svg
。
use bevy_svg_map::load_svg_map;
use bevy::prelude::*;
// We need to provide a struct implementing the StyleStrategy
// leave it as default, we'll come back to this later
struct MyStrategy;
impl StyleStrategy for MyStrategy {}
fn main() {
App::build()
.add_default_plugins()
.add_startup_system(setup.system())
.run();
}
fn setup(mut com: Commands, mat: ResMut<Assets<ColorMaterial>>, mesh: ResMut<Assets<Mesh>>) {
load_svg_map(com, mat, mesh, "assets/ex.svg", MyStrategy);
}
这应该会显示一些线条,如上图的图像所示。然而,它们是纯黑色的(StyleStrategy
的默认值)。关于使用SVG路径的线条颜色怎么办?
// we're now also using SvgStyle
use bevy_svg_map::{load_svg_map, StyleStrategy, SvgStyle};
use bevy::prelude::*;
struct MyStrategy;
impl StyleStrategy for MyStrategy {
// implement this trait method
fn color_decider(&self, style: &SvgStyle) -> Color {
match style.stroke() {
Some(c) => c,
// add red lines if the Color could not be parsed from the SVG
_ => Color::RED,
}
}
}
好吧,这更有趣了。注意 SvgStyle
如何公开SVG路径的样式属性。对于这些路径中的每一个,都会应用 color_decider
函数来……好吧……决定它的颜色。
最后,为了提供一些真正有趣的功能,我们可以对从路径创建的每个组件应用任意函数。
// ... same as before
use bevy::ecs::system::EntityCommands;
// This Component will be added to each SpriteComponents created from a path
enum Collider {
Scorable,
Solid,
}
impl StyleStrategy for MyStrategy {
// implement this trait method
fn color_decider(&self, style: &SvgStyle) -> Color {
// same as before
}
fn component_decider(&self, style: &SvgStyle, mut comp: EntityCommands) {
// use the stroke opacity to decide the kind of Collider
comp.insert(
if style.stroke_opacity().unwrap() == 1.0 {
Collider::Solid
} else{
Collider::Scorable
}
);
}
}
在文档中查看更多可从 SvgStyle
提取的属性!
故障排除
- 将文档属性(在Inkscape中为 Ctrl+Shift+D)设置为像素,以便获得正确的世界单位。
- 查看有关设置SVG输出的 此评论。
功能
- 加载水平和垂直线条。
- 加载其他类型的 svgtypes
PathSegment
。 - 提供策略 trait,用于使用样式添加组件和材质。
- 基本形状。
- 处理单位。
依赖
~17–26MB
~428K SLoC