by sickn33
使用 Bevy 的面向��据架构构建高性能游戏。本技能将教你在 Rust 中使用实体组件系统模式实现并行游戏逻辑。
1. 打开 Claude 聊天界面
2. 点击下方 "📋 复制" 按钮
3. 粘贴到 Claude 聊天框中并发送
4. 输入 "使用 bevy-ecs-expert 技能" 开始使用
=== bevy-ecs-expert 技能 === 作者: sickn33 描述: 使用 Bevy 的面向��据架构构建高性能游戏。本技能将教你在 Rust 中使用实体组件系统模式实现并行游戏逻辑。 使用方法: 1. 调用技能: "使用 bevy-ecs-expert 技能" 2. 提供相关信息: 根据技能要求提供必要参数 3. 查看结果: 技能会返回处理结果 示例: "使用 bevy-ecs-expert 技能,帮我分析一下这段代码"
这种方法适用于所有 Claude 用户,不需要安装额外工具。
coding
safe
A guide to building high-performance game logic using Bevy's data-oriented ECS architecture. Learn how to structure systems, optimize queries, manage resources, and leverage parallel execution.
Use simple structs for data. Derive Component and Reflect.
#[derive(Component, Reflect, Default)]
#[reflect(Component)]
struct Velocity {
x: f32,
y: f32,
}
#[derive(Component)]
struct Player;
Systems are regular Rust functions that query components.
fn movement_system(
time: Res<Time>,
mut query: Query<(&mut Transform, &Velocity), With<Player>>,
) {
for (mut transform, velocity) in &mut query {
transform.translation.x += velocity.x * time.delta_seconds();
transform.translation.y += velocity.y * time.delta_seconds();
}
}
Use Resource for global data (score, game state).
#[derive(Resource)]
struct GameState {
score: u32,
}
fn score_system(mut game_state: ResMut<GameState>) {
game_state.score += 10;
}
Add systems to the App builder, defining execution order if needed.
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.init_resource::<GameState>()
.add_systems(Update, (movement_system, score_system).chain())
.run();
}
#[derive(Bundle)]
struct PlayerBundle {
player: Player,
velocity: Velocity,
sprite: SpriteBundle,
}
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn(PlayerBundle {
player: Player,
velocity: Velocity { x: 10.0, y: 0.0 },
sprite: SpriteBundle {
texture: asset_server.load("player.png"),
..default()
},
});
}
Use With and Without to filter entities efficiently.
fn enemy_behavior(
query: Query<&Transform, (With<Enemy>, Without<Dead>)>,
) {
for transform in &query {
// Only active enemies processed here
}
}
Query filters (With, Without, Changed) to reduce iteration count.Res over ResMut when read-only access is sufficient to allow parallel execution.Bundle to spawn complex entities atomically.RefCell or interior mutability inside components; let the ECS handle borrowing.Problem: System panic with "Conflict" error.
Solution: You are likely trying to access the same component mutably in two systems running in parallel. Use .chain() to order them or split the logic.
View Count
0
Download Count
0
Favorite Count
0
Quality Score
70