rust 如何在bevy中设置多个默认插件

fzsnzjdm  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(110)

我想设置window pluginimage plugin,但出现错误。
我知道问题就在这里。但是我不能修复。我还想使用img_plugin。

.add_plugins(DefaultPlugins.set(window_plugin))
.add_plugins(DefaultPlugins.set(img_plugin))
cargo run
   Compiling bevy_tutorials v0.1.0 (C:\dev\george\Rust\bevy\bevy_tutorials)
    Finished dev [unoptimized + debuginfo] target(s) in 5.45s
     Running `target\debug\bevy_tutorials.exe`
Hello, world!

2023-02-10T13:33:25.590981Z  INFO bevy_winit::system: Creating new window "BevyMark" (0v0)
2023-02-10T13:33:25.906723Z  INFO bevy_render::renderer: AdapterInfo { }

thread 'main' panicked at 'Error adding plugin bevy_log::LogPlugin in group bevy_internal::default_plugins::DefaultPlugins: plugin was already added in application', C:\Users\george\.cargo\registry\src\github.com-2525252525252525\bevy_app-0.10.0\src\plugin_group.rs:183:25
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

main.rs中的代码

use bevy::{
    prelude::*, 
    sprite::MaterialMesh2dBundle, 
    window::PresentMode, 
};

use crate::{plugins::fps_counter::FpsCounterPlugin, examples::exp1::Exp1Plugin};

const BACKGROUND_COLOR: bevy::prelude::Color = Color::BLACK;

mod plugins;
mod examples;

fn main() {
    println!("Hello, world!");

    let window_plugin = WindowPlugin {
        primary_window: Some(Window {
            title: "BevyMark".into(),
            resolution: (800., 600.).into(),
            present_mode: PresentMode::AutoNoVsync,
            ..default()
        }),
        ..default()
    };

    let img_plugin = ImagePlugin::default_nearest();

    App::new()

        // * Add your resources here.
        .insert_resource(ClearColor(BACKGROUND_COLOR))
       
        // * Add your plugins here.
        .add_plugins(DefaultPlugins.set(window_plugin))
        .add_plugins(DefaultPlugins.set(img_plugin))
       
        .add_plugin(FpsCounterPlugin)
        .add_plugin(Exp1Plugin)
        
      
        // * On init system. Runs only ones.
        .add_startup_system(setup)

        // * Add your systems here. Runs each frame.
        // .add_system()

        .run();
}

fn setup(
    mut commands: Commands,
    mut meshes: ResMut<Assets<Mesh>>,
    mut materials: ResMut<Assets<ColorMaterial>>,
) {
    // add camera
    // commands.spawn(Camera2dBundle::default());

    // add rect mesh
    commands.spawn(MaterialMesh2dBundle {
        mesh: meshes.add(Mesh::from(shape::Quad::default())).into(),
        transform: Transform::default().with_scale(Vec3::splat(128.)),
        material: materials.add(ColorMaterial::from(Color::PURPLE)),
        ..default()
    });
}
3qpi33ja

3qpi33ja1#

你有很多选择。
我认为首选的选项是简单地set这两个插件,并将它们添加到一个插件组中:

.add_plugins(DefaultPlugins.set(window_plugin).set(img_plugin))

或者,您可以显式地添加所有插件,如第二个示例所示:

App::new()
    .add_plugin(CorePlugin::default())
    .add_plugin(InputPlugin::default())
    .add_plugin(window_plugin)
    .add_plugin(img_plugin)
    /* more plugins omitted for brevity */
    .run();

相关问题