2 个不稳定版本
0.2.0 | 2021年7月19日 |
---|---|
0.0.0 | 2021年7月8日 |
在游戏开发中排名2120
每月下载量24次
用于bevy_retrograde
110KB
2K SLoC
Bevy Retrograde
Bevy Retrograde是一个针对Bevy的2D、像素级渲染器,可以使用OpenGL/WebGL针对网页和桌面进行部署。
Bevy Retrograde致力于提供一种简单、舒适的方式来编写2D、像素级游戏。与Bevy的默认设置相比,您无需与3D场景一起工作即可创建2D游戏。精灵及其坐标基于复古分辨率的场景中的像素位置。
Bevy Retrograde替换了许多您通常使用的Bevy组件和Bundles(如SpriteBundle
、Camera2DBundle
等),并自带Camera
、Image
、Sprite
等组件和Bundles。Bevy Retrograde旨在在Bevy之上提供一个专注的2D体验,帮助消除一些陷阱,并使您在只需求2D时更容易思考游戏。
我们希望提供一个“开箱即用”的插件,几乎包含您使用Bevy制作2D像素游戏的全部需求,包括碰撞、声音、保存数据等。在添加这些功能的同时,我们将尽力保持与全网的兼容性,但无法保证所有功能都适用于网络。
这些额外功能将以可选的cargo功能的形式提供,如果不需要,可以禁用,在适用的情况下,还可以作为单独的Rust crate打包,即使您不想使用Bevy Retrograde的其余部分,也可以使用。
许可证
Bevy Retrograde LDtk遵循Katharos许可证,该许可证对您可以使用它的方式施加某些限制。请在使用Bevy Retrograde进行项目之前阅读并理解这些条款。
开发状态
Bevy Retrograde处于早期开发阶段。API尚不稳定,可能会随时发生重大变化。计划中的可能变化包括
- 切换到使用Bevy的内置渲染器进行桌面/移动设备渲染,以及使用
bevy_webgl2
进行Web渲染,而不是使用我们自己的基于OpenGL的渲染器。这将使Bevy Retrograde更兼容Bevy的更大生态系统,而不是创建一个仅适用于Bevy Retro的插件孤岛。我们可能会等待Bevy渲染器的第二次迭代来尝试这个。
参见下方的支持的Bevy版本。
功能 & 示例
查看我们的示例列表,了解如何使用每个Bevy Retrograde功能
- 支持开箱即用的Web和桌面
- 精灵和精灵图集
- 使用三种相机模式(固定宽度、固定高度和字幕框)进行缩放像素完美的渲染
- 精灵默认情况下是像素完美对齐的,但可以按精灵设置非完美对齐
- LDtk地图加载和渲染
- 与RAUI UI库集成,用于构建游戏内用户界面和HUD
- 由Heron和Rapier提供物理和碰撞检测功能,并自动从精灵图像生成凸碰撞形状
- BDF字体文本渲染
- 支持后处理的自定义着色器,包括内置的CRT着色器
- 渲染钩子允许您降级到原始的Luminance调用以进行自定义渲染
支持的Bevy版本
Bevy Retrograde目前适用于最新的Bevy版本,并且可能也支持Bevy master。Bevy Retrograde将尝试跟进最新的Bevy版本,但如果Bevy master中引入了我们需要的功能,我们可能需要在下一个Bevy版本发布之前暂时使用Bevy master。
当依赖于bevy
包时,您必须确保在您的Cargo.toml
中将default-features
设置为false
,以确保bevy
中的渲染类型不会与bevy_retrograde
中的类型冲突。
Cargo.toml
:
bevy = { version = "0.5", default-features = false }
bevy_retrograde = "0.2.0"
示例
以下是一个使用Bevy Retrograde的快速示例
main.rs
:
use bevy::prelude::*;
use bevy_retrograde::prelude::*;
fn main() {
App::build()
.add_plugins(RetroPlugins)
.add_startup_system(setup.system())
.run();
}
struct Player;
fn setup(
mut commands: Commands,
asset_server: Res<AssetServer>,
) {
// Load our sprites
let red_radish_image = asset_server.load("redRadish.png");
let yellow_radish_image = asset_server.load("yellowRadish.png");
let blue_radish_image = asset_server.load("blueRadish.png");
// Spawn the camera
commands.spawn().insert_bundle(CameraBundle {
camera: Camera {
// Set our camera to have a fixed height and an auto-resized width
size: CameraSize::FixedHeight(100),
background_color: Color::new(0.2, 0.2, 0.2, 1.0),
..Default::default()
},
..Default::default()
});
// Spawn a red radish
let red_radish = commands
.spawn_bundle(SpriteBundle {
image: red_radish_image,
transform: Transform::from_xyz(0., 0., 0.),
sprite: Sprite {
flip_x: true,
flip_y: false,
..Default::default()
},
..Default::default()
})
// Add our player marker component so we can move it
.insert(Player)
.id();
// Spawn a yellow radish
let yellow_radish = commands
.spawn_bundle(SpriteBundle {
image: yellow_radish_image,
transform: Transform::from_xyz(-20., 0., 0.),
sprite: Sprite {
// Flip the sprite upside down 🙃
flip_y: true,
// By setting a sprite to be non-pixel-perfect you can get smoother movement
// for things like characters, like they did in Shovel Knight®.
pixel_perfect: false,
..Default::default()
},
..Default::default()
})
.id();
// Make the yellow radish a child of the red radish
commands.entity(red_radish).push_children(&[yellow_radish]);
// Spawn a blue radish
commands.spawn().insert_bundle(SpriteBundle {
image: blue_radish_image,
// Set the blue radish back a layer so that he shows up under the other two
transform: Transform::from_xyz(-20., -20., -1.),
sprite: Sprite {
flip_x: true,
flip_y: false,
..Default::default()
},
..Default::default()
});
}
依赖关系
~50MB
~699K SLoC