标签: bevy

为什么 Rapier 物理插件不满足 Bevy 的特质界限?

我一直在尝试运行这个最小的示例,以使Rapier的物理原理与Bevy一起工作:

use bevy::prelude::*;
use bevy_rapier2d::prelude::*;


fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugin(RapierPhysicsPlugin::<NoUserData>::pixels_per_meter(100.0))
        .run();
}
Run Code Online (Sandbox Code Playgroud)

它失败了:

error[E0277]: the trait bound `bevy_rapier2d::plugin::RapierPhysicsPlugin: Plugin` is not satisfied
   --> src/main.rs:8:21
    |
8   |         .add_plugin(RapierPhysicsPlugin::<NoUserData>::pixels_per_meter(100.0))
    |          ---------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Plugin` is not implemented for `bevy_rapier2d::plugin::RapierPhysicsPlugin`
    |          |
    |          required by a bound introduced by this call
    |
    = help: the following other types implement trait `Plugin`:
              AnimationPlugin
              AssetCountDiagnosticsPlugin<T>
              AssetPlugin
              AudioPlugin
              BloomPlugin
              CameraPlugin
              CameraProjectionPlugin<T>
              ColorMaterialPlugin
            and 44 others
note: required by a …
Run Code Online (Sandbox Code Playgroud)

rust bevy rapier-2d rapier

5
推荐指数
1
解决办法
1300
查看次数

如何在 Bevy 中翻转 spritesheet

我试图根据玩家是在屏幕上向左还是向右移动来翻转精灵。我目前修改 SpriteSheetComponents 变换的方法如下,似乎根本没有改变精灵:

  fn player_direction_system(
      velocity: &Velocity,
      _: &FaceMovementDirection,
      mut transform: Mut<Transform>,
  ) {
      let flip = velocity.horizontal.signum();
      transform.value = transform.value * Mat4::from_scale(Vec3::unit_y() * flip);
  }
Run Code Online (Sandbox Code Playgroud)

我应该修改精灵的不同组件以翻转它吗?

rust bevy

4
推荐指数
1
解决办法
420
查看次数

使用 Bevy 0.4 拖动精灵的可接受方法是什么?

在尝试 Bevy 时,我需要拖放精灵。不幸的是,这似乎不是现成的,或者我没有在文档中找到它。

实现这一目标最惯用的方法是什么?

到目前为止我所尝试的都在我的答案中,但我很乐意接受另一个更好/更快/更惯用的解决方案。

drag-and-drop sprite drag rust bevy

4
推荐指数
1
解决办法
3393
查看次数

使用 Handle 将资产加载到 Bevy 引擎并稍后使用资产的正确方法是什么?

我正在学习 Rust 和 Bevy 引擎,我希望Font在整个应用程序生命周期中保持加载某些资产(例如 s)。


// Resource for fonts:
#[derive(Default, Clone)]
pub struct ResFont {
    pub ui: Handle<Font>, // The font that will be used in this example.
    pub dialog: Handle<Font>,
    ...
}

// Insert resource in main() during App building:
{
    .insert_resource(ResFont::default())
}

// Load resource during startup:
pub fn startup(asset_server: Res<AssetServer>, mut res_font: ResMut<ResFont>)
{
    res_font.ui = asset_server.load("font/Default.ttf");
}

// Use the font resource in a different place:
pub fn setup_ui(res_font: ResMut<ResFont>)
{
    ...
    TextStyle …
Run Code Online (Sandbox Code Playgroud)

game-development rust bevy

4
推荐指数
1
解决办法
3297
查看次数

了解如何在 2D 中渲染三角形(或多边形)

在许多示例中,突破仅使用矩形,有加载精灵的示例,有加载 3D 网格的示例。在二维中,我想绘制一个三角形(或其他多边形),但我无法通过文档弄清楚它。

bevy

3
推荐指数
1
解决办法
4034
查看次数

如何在使用 commands.spawn_bundle() 生成的 bevy 0.5.0 中消除实体

这是一个非常简单的问题。我已经重写了我的代码以处理新版本 bevy 附带的语法和其他更改。

编译时似乎一切正常,除了实体的消失。

我在上述实体中生成,例如:

commands.spawn_bundle(PbrBundle {
            mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
            material: builder_texture.clone(),
            transform: Transform::from_matrix(Mat4::from_scale_rotation_translation(
                Vec3::splat(0.75),
                Quat::from_rotation_x(0.0),
                Vec3::new(0.0, 0.0, 0.0),
            )),
                ..Default::default()
        })
        .insert(controll::BuilderIndicator);
Run Code Online (Sandbox Code Playgroud)

但我无法像这样让它消失:

fn despawn(
    mut entity: Query<(Entity, controll::BuilderIndicator), With<controll::BuilderIndicator>>,
    mut commands: Commands,
) {
    for (entity, example) in entity.iter_mut() {
        commands.despawn(entity);
    }
}
Run Code Online (Sandbox Code Playgroud)

它返回:

error[E0599]: no method named `despawn` found for struct `bevy::prelude::Commands<'_>` in the current scope
   --> src/controll.rs:120:26
    |
120 |                 commands.despawn(entity);
    |                          ^^^^^^^ help: there is an associated function with a similar name: …
Run Code Online (Sandbox Code Playgroud)

bevy

3
推荐指数
1
解决办法
327
查看次数

使用 get_single() 时如何修改 Bevy 中的组件?

我正在与 Bevy 一起制作一个简单的自上而下的“弹幕地狱”游戏。我尝试创建一个系统来照顾玩家的冲刺,如下所示:

fn player_dashing_system(
    kb: Res<Input<KeyCode>>,
    query: Query<&mut Player>
) {
    if let Ok(&mut player) = query.get_single() {
        if kb.just_pressed(KeyCode::Space) {
            player.speed = BASE_PLAYER_DASH_SPEED;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

fn player_dashing_system(
    kb: Res<Input<KeyCode>>,
    query: Query<&mut Player>
) {
    if let Ok(&mut player) = query.get_single() {
        if kb.just_pressed(KeyCode::Space) {
            player.speed = BASE_PLAYER_DASH_SPEED;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过摆弄变量的可变性,但没有任何效果。

rust bevy

3
推荐指数
1
解决办法
873
查看次数

Bevy ECS 有没有办法进行复杂的查询?

是否可以创建直接按组件中字段的值进行过滤的复杂查询?

例如,假设 - 我有一个 2D 棋盘游戏(比如国际象棋或其他游戏),我想弄清楚特定坐标上是否有一个棋子。我的组件如下所示:

#[derive(Component)]
struct BoardPosition {
    x: usize,
    y: usize,
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找位置(4,5)的那块。然后,我的查询将如下所示 - 迭代整个板:

fn some_system(pieces: Query<&BoardPosition>) {
    for piece in pieces.iter() {
        if piece.x == 4 && piece.y == 5 {
            // This is my piece, now I can do whatever I want with it
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

但显然,找到一个简单的片段需要 O(n) 的时间。如果我将板存储为双列表(即[[T; N]; N]),那么通过简单地执行 来找到这块将需要 O(1) board[4][5],但由于 bevy 拥有组件,所以我不能简单地访问该实体(或其其他组件)以此类推。

是否有更智能的方法来执行此操作,这将允许快速查询允许我获取(或更改)所查询实体的其他组件?

rust bevy

3
推荐指数
1
解决办法
1737
查看次数

为什么这个庞大的项目需要这么长时间才能编译和启动?

我开始遵循这个关于如何在 bevy 中制作游戏的教程。代码编译得很好,但仍然很慢(老实说,我不确定这是否正常,大约需要 8 秒),但是当我启动游戏时,窗口会变白 ( )Not Responding几秒钟(大约相同的时间)正确加载之前的时间(作为编译时间,可能稍微少一点)。
这是我的Cargo.toml

[package]
name = "rustship"
version = "0.1.0"
edition = "2021"

[dependencies]
bevy = "0.8.1"

# Enable a small amount of optimization in debug mode
[profile.dev]
opt-level = 1

# Enable high optimizations for dependencies (incl. Bevy), but not for our code:
[profile.dev.package."*"]
opt-level = 3

[workspace]
resolver = "2"
Run Code Online (Sandbox Code Playgroud)

我尝试了使用和不使用工作区解析器的情况。我的 rustup 工具链是nightly-x86_64-pc-windows-gnu,我用它rust-lld来链接程序:

[target.nightly-x86_64-pc-windows-gnu]
linker = "rust-lld.exe"
rustflags = ["-Zshare-generics=n"]
Run Code Online (Sandbox Code Playgroud)

根据官方的 …

compiler-optimization rust rust-cargo bevy

3
推荐指数
1
解决办法
2734
查看次数

如何在 Bevy 中使用 Windowdescriptor?

use bevy::prelude::*;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .insert_resource(WindowDescriptor{
            width: 140.0,
            height:140.0,
            title: "Game of Life".to_string(),
            ..Default::default()
        })
        .run();
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这不起作用并且显示以下编译错误

error[E0277]: the trait bound `bevy::prelude::WindowDescriptor: Resource` is not satisfied                                                                                             
   --> src\main.rs:7:26
    |
7   |           .insert_resource(WindowDescriptor{
    |  __________---------------_^
    | |          |
    | |          required by a bound introduced by this call
8   | |             width: 140.0,
9   | |             height:140.0,
10  | |             title: "Game of Life".to_string(),
11  | |             ..Default::default()
12  | |         })
    | |_________^ the trait `Resource` is …
Run Code Online (Sandbox Code Playgroud)

rust bevy

3
推荐指数
2
解决办法
2910
查看次数

在 Bevy 引擎中,如何在 for-each 系统中使用 &amp;mut 查询?

当使用组件的变异扩展基本示例时,我尝试添加&mut到系统中的组件参数。但是,这触发了no method "system" found错误。

我的代码在这里:

use bevy::prelude::*;

  fn setup(
      mut commands: Commands,
      asset_server: Res<AssetServer>,
      mut materials: ResMut<Assets<ColorMaterial>>,
  ) {
      let texture_handle = asset_server.load("icon.png").unwrap();
      commands
          .spawn(Camera2dComponents::default())
          .spawn(SpriteComponents {
              material: materials.add(texture_handle.into()),
              rotation: Rotation::from_rotation_z(0.0),
              ..Default::default()
          })
          .with(Player(0.0))
          .with(());
  }

  struct Player(f32);

  fn control_system(keyboard_input: Res<Input<KeyCode>>, player: &mut Player) { // <- mut added here
      let mut r = player.0;
      println!("hello");

      /*
      if keyboard_input.pressed(KeyCode::Left) {
          player.0 += 0.1;
      }

      if keyboard_input.pressed(KeyCode::Right) {
          player.0 -= 0.1;
      }
      */
  }

  fn main() { …
Run Code Online (Sandbox Code Playgroud)

rust bevy

2
推荐指数
1
解决办法
860
查看次数

我无法用 Rust 编译 Bevy?

我正在尝试使用 Bevy 在 Rust 中创建游戏,但在尝试编译我的项目时遇到错误。我收到的错误消息是:

error[E0658]: `let...else` statements are unstable
   --> C:\Users\drew0\.cargo\registry\src\github.com-1ecc6299db9ec823\bevy_render_macros-0.9.0\src\as_bind_group.rs:119:13
Run Code Online (Sandbox Code Playgroud)

我尝试按照 Bevy 网站上的教程进行操作,并尝试删除分号,但错误仍然存​​在。如何解决此问题并使用 Bevy 成功编译我的项目?

rust bevy

0
推荐指数
1
解决办法
709
查看次数