#bevy-ecs #macroquad #miniquad #ecs #bevy

quad_bevy

bevy_ecs for miniquad/macroquad without wasm-bindgen

1个不稳定版本

0.0.1 2024年8月2日

#21 in #miniquad

Download history 88/week @ 2024-07-29 11/week @ 2024-08-05

每月 99次下载

MIT/Apache

7KB

bevy_ecs for miniquad/macroquad without wasm-bindgen

为什么?

不知道,减少冗余 & 更快编译?


它是如何工作的?

通过修改bevy crate以删除功能或更改实现。截至0.14.0,更改包括

  • 移除bevy_ecs的所有多线程相关功能
  • 移除bevy_app中的schedule_runner和panic_handler插件
  • bevy_app中移除对bevy_time的使用
  • 修改bevy_utils以使用miniquad::date::now()而不是web-time

如何使用它?

通过将以下行添加到.cargo/config.toml

[patch.crates-io]
bevy_ecs = { git = "https://github.com/yui-915/quad_bevy", branch = "[email protected]" }
bevy_app = { git = "https://github.com/yui-915/quad_bevy", branch = "[email protected]" }
bevy_utils = { git = "https://github.com/yui-915/quad_bevy", branch = "[email protected]" }

示例

点击显示

您可以为网络构建它,就像任何其他macroquad项目一样,它将无需任何额外设置即可工作

use bevy_app::prelude::*;
use bevy_ecs::prelude::*;
use macroquad::prelude::*;

fn main() {
    App::new()
        .add_plugins(MacroquadRunner("Hello, world!"))
        .add_systems(Startup, spawn_squares)
        .add_systems(Update, (move_squares, bg, draw_squares).chain())
        .run();
}

#[derive(Component)]
struct Position(f32, f32);

fn spawn_squares(mut cmds: Commands) {
    cmds.spawn(Position(0.0, 100.0));
    cmds.spawn(Position(450.0, 500.0));
}

fn bg() {
    clear_background(ORANGE);
}

fn move_squares(mut query: Query<&mut Position>) {
    for mut position in &mut query {
        position.0 += 10.0;
        if position.0 > screen_width() {
            position.0 = 0.0;
        }
    }
}

fn draw_squares(query: Query<&Position>) {
    for position in &query {
        draw_rectangle(position.0, position.1, 100.0, 100.0, BLACK);
    }
}

// Example bevy runner plugin for macroquad
pub struct MacroquadRunner(pub &'static str);
impl Plugin for MacroquadRunner {
    fn build(&self, app: &mut App) {
        let window_title = self.0;
        app.set_runner(|mut app| {
            macroquad::Window::new(window_title, async move {
                loop {
                    app.update();
                    next_frame().await;
                }
            });
            bevy_app::AppExit::Success
        });
    }
}

我应该使用它吗?

可能不是,这个项目高度实验性,可能由于不兼容的更改或不同的miniquad版本而破坏您的代码


为什么这是一个crate?

只是为了在crates.io上显示,否则它什么都不做。您可以在不下载此crate的情况下使用修补过的bevy crates。


许可证

我将保留原始bevy crates的“MIT或Apache 2.0”许可证

没有运行时依赖