#bevy #2d #pixel-perfect #gamedev #bevy-retrograde #camera-image #2d-game

bevy_retrograde_core

Bevy Retrograde的核心组件和渲染器

3个版本 (破坏性更新)

0.2.0 2021年7月19日
0.1.0 2021年6月11日
0.0.0 2021年6月6日

#2325 in 游戏开发

Download history 16/week @ 2024-03-11 13/week @ 2024-03-18 29/week @ 2024-03-25 109/week @ 2024-04-01 15/week @ 2024-04-08 16/week @ 2024-04-15 18/week @ 2024-04-22 8/week @ 2024-04-29 14/week @ 2024-05-06 13/week @ 2024-05-13 15/week @ 2024-05-20 3/week @ 2024-05-27 12/week @ 2024-06-03 13/week @ 2024-06-10 8/week @ 2024-06-17 23/week @ 2024-06-24

56每月下载次数
用于 6 crates

自定义许可证

91KB
1.5K SLoC

Rust 1.5K SLoC // 0.1% comments GLSL 174 SLoC // 0.2% comments

Bevy Retrograde

Crates.io Docs.rs Build Status lines of code Katharos License

(使用Bevy Retrograde和Skip'n Go制作的Bounty Bros.游戏的截图)

bounty bros game screenshot

Bevy Retrograde是一个针对Bevy的2D、像素级渲染器,可以使用OpenGL/WebGL针对网页和桌面进行部署。

Bevy Retrograde专注于提供一种简单且易于使用的编写2D、像素级游戏的方法。与开箱即用的Bevy设置相比,您无需处理3D场景即可创建2D游戏。精灵及其坐标基于复古分辨率的场景中的像素位置。

Bevy Retrograde替换了许多通常使用的开箱即用的Bevy组件和包(如SpriteBundleCamera2DBundle等),并附带自己的CameraImageSprite等组件和包。Bevy Retrograde试图在Bevy之上提供一个专注于2D的体验,有助于避免一些陷阱,并使您在仅需要2D时更容易考虑您的游戏。

我们希望提供一个功能齐全的插件,它几乎包含您使用Bevy制作2D像素游戏所需的所有内容,包括碰撞、声音、保存数据等。在添加这些功能时,我们将尽量保持与Web的完全兼容性,但无法保证所有功能都适用于Web。

这些额外功能将以可选的Cargo功能的形式包含在内,如果不需要,则可以禁用,并且适用于包装,可以将其作为独立的Rust crates打包,即使您不想使用Bevy Retrograde的其他部分也可以使用。

许可证

Bevy Retrograde LDtk 在 Katharos License 许可下发布,该许可对您使用它的方式施加了一些限制。请在使用 Bevy Retrograde 之前阅读并理解这些条款。

开发状态

Bevy Retrograde 处于早期开发阶段。API 不稳定,可能会在任何时候发生重大变化。计划中的可能变化包括

  • 切换到使用 Bevy 的内置渲染器进行桌面/移动设备,以及使用 bevy_webgl2 进行网络,而不是使用我们自己的基于 OpenGL 的渲染器。这可能会使 Bevy Retrograde 更好地与更大的 Bevy 生态系统兼容,而不是创建一个仅适用于 Bevy Retro 的插件孤岛。我们可能会等待 Bevy 渲染器的第二次迭代来尝试这一点。

请参阅下面的支持的 Bevy 版本

功能与示例

查看我们的 示例列表,了解如何使用每个 Bevy Retrograde 功能

  • 开箱即支持网络和桌面
  • 精灵和精灵图集
  • 具有三种相机模式(固定宽度、固定高度和信封式)的缩放像素完美渲染
  • 精灵默认情况下是像素完美对齐的,但可以按精灵设置非完美对齐
  • LDtk 地图加载和渲染
  • RAUI UI 库的集成,用于构建游戏内用户界面和抬头显示
  • HeronRapier 提供的物理和碰撞检测,能够自动从精灵图像生成凸碰撞形状
  • BDF 字体的文本渲染
  • 用于后处理的自定义着色器,包括内置的 CRT 着色器
  • 渲染钩子,允许您直接调用 Luminance 进行自定义渲染

支持的 Bevy 版本

Bevy Retrograde 目前适用于最新的 Bevy 发布版,并且可能也支持 Bevy master。Bevy Retrograde 将尝试跟进最新的 Bevy 发布版,但如果 Bevy master 中引入了我们需要的功能,我们可能需要一段时间使用 Bevy master,直到下一个 Bevy 发布版。

当依赖 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()
    });
}

依赖项

~48MB
~670K SLoC