0Pricing
Learn Rust Coding · Lección

Crear y mover entidades

Coloque elementos en pantalla

Crear y mover entidades es una lección gratuita de Learn Rust Coding en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn Rust Coding, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn Rust Coding incluye 4 lecciones en total.

Comandos: generación diferida

No puede modificar World directamente mientras los sistemas se ejecutan en paralelo. En su lugar, pone en cola los cambios estructurales mediante Commands.

La generación, eliminación y adición de componentes se registran y se aplican al final de la etapa de la planificación, lo que mantiene seguro el acceso.

fn setup(mut commands: Commands) {
    commands.spawn_empty();
}

Generación con un Bundle

Un bundle es un grupo de componentes que se insertan juntos. El bundle más sencillo es simplemente una tupla de componentes.

Bevy trata cada elemento de la tupla como un componente que debe adjuntarse, de modo que una sola llamada a spawn puede proporcionar a una entidad todos sus datos iniciales.

fn setup(mut commands: Commands) {
    commands.spawn((
        Position { x: 0.0, y: 0.0 },
        Velocity { x: 1.5, y: 0.0 },
        Player,
    ));
}

Una cámara para ver

No se renderiza nada sin una cámara. En los juegos 2D, genera una Camera2d en su sistema de inicio.

La cámara también es una entidad con componentes de cámara: otro ejemplo de la uniformidad de ECS. Todo lo que hay en la escena es una entidad.

fn setup(mut commands: Commands) {
    commands.spawn(Camera2d::default());
}

Generación de un Sprite

Para dibujar algo, proporcione a una entidad un Sprite y un Transform. El transform contiene la posición, la rotación y la escala en el espacio del mundo.

Un sprite coloreado no necesita ningún recurso de imagen, lo que resulta práctico para crear prototipos de movimiento antes de importar los gráficos.

commands.spawn((
    Sprite::from_color(Color::srgb(0.2, 0.7, 1.0), Vec2::new(40.0, 40.0)),
    Transform::from_xyz(0.0, 0.0, 0.0),
    Velocity { x: 80.0, y: 0.0 },
));

Transform frente a posición personalizada

En los juegos reales de Bevy, normalmente moverá el Transform integrado en lugar de un Position personalizado, porque el renderizado lee Transform directamente.

La traslación es un Vec3. En 2D, cambia x e y y conserva z para ordenar el dibujado.

#[derive(Component)]
struct Velocity { x: f32, y: f32 }

fn apply_velocity(mut q: Query<(&mut Transform, &Velocity)>) {
    for (mut tf, vel) in &mut q {
        tf.translation.x += vel.x;
        tf.translation.y += vel.y;
    }
}

Iterar una Query de forma mutable

Para cambiar los datos de un componente, solicite &mut T e itere sobre &mut query. Cada elemento produce referencias mutables.

Bevy garantiza que ningún par de sistemas mantenga simultáneamente un acceso mutable en conflicto, por lo que este bucle es seguro incluso mientras se ejecutan otros sistemas.

fn move_all(mut q: Query<&mut Transform, With<Player>>) {
    for mut tf in &mut q {
        tf.translation.x += 1.0;
    }
}

Generación de muchas entidades

Los bucles le permiten poblar un nivel. Llame a spawn dentro de un bucle for de Rust para crear una cuadrícula de obstáculos o un enjambre de enemigos.

Cada iteración pone en cola su propio comando y todos se aplican juntos en el límite de la etapa.

fn spawn_row(mut commands: Commands) {
    for i in 0..5 {
        commands.spawn((
            Sprite::from_color(Color::WHITE, Vec2::splat(20.0)),
            Transform::from_xyz(i as f32 * 30.0, 0.0, 0.0),
        ));
    }
}

Eliminación de entidades

Elimine una entidad por completo con commands.entity(id).despawn(). Esto libera sus componentes y recicla el índice de la entidad.

Normalmente, elimina entidades desde un sistema que consultó el id Entity de la entidad, por ejemplo, una bala que salió de la pantalla.

fn cleanup(mut commands: Commands, q: Query<(Entity, &Transform)>) {
    for (e, tf) in &q {
        if tf.translation.y > 600.0 {
            commands.entity(e).despawn();
        }
    }
}

Adición posterior de componentes

Puede adjuntar nuevos componentes a una entidad existente durante la ejecución mediante insert. Así puede asignar la etiqueta Shield a un jugador potenciado.

La eliminación funciona de la misma forma con remove::<T>(). Ambos son cambios estructurales, por lo que pasan por Commands.

commands.entity(player).insert(Shield { hits: 3 });
// later
commands.entity(player).remove::<Shield>();

Z para las capas

En 2D, el valor z de la traslación de un transform determina el orden de dibujado. Un z mayor se renderiza por encima.

Asigne al fondo un z bajo y al jugador uno más alto para que los sprites nunca desaparezcan detrás del escenario.

// background behind, player in front
commands.spawn((bg_sprite, Transform::from_xyz(0.0, 0.0, 0.0)));
commands.spawn((player_sprite, Transform::from_xyz(0.0, 0.0, 10.0)));

Conectarlo todo

Genere entidades en Startup y muévalas en Update. El sistema de inicio crea la cámara y las entidades una vez; el sistema de actualización las mueve en cada fotograma.

Esta separación mantiene la inicialización fuera de la ruta crítica que se ejecuta en cada fotograma.

App::new()
    .add_plugins(DefaultPlugins)
    .add_systems(Startup, setup)
    .add_systems(Update, apply_velocity)
    .run();

Comprobación rápida

Reflexione sobre cómo se aplican los cambios estructurales.

Repaso: generación y movimiento

Genera entidades con bundles mediante Commands, las renderiza con Sprite y Transform, y las mueve modificando el transform en un sistema Update.

La eliminación y la inserción de componentes también son comandos. A continuación, hará que el movimiento responda a la entrada del teclado y al tiempo real transcurrido.

Preguntas frecuentes

¿La lección «Crear y mover entidades» es gratis?

Sí — el texto completo de «Crear y mover entidades» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn Rust Coding, actualiza a CoddyKit PRO. El curso de Learn Rust Coding incluye 4 lecciones en total.

¿Qué aprenderé en «Crear y mover entidades»?

Coloque elementos en pantalla Practicas Learn Rust Coding con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Learn Rust Coding?

No se requiere experiencia previa. Learn Rust Coding en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Crear y mover entidades»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Learn Rust Coding?

Sí. Cada lección de Learn Rust Coding incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. La mentalidad ECS
  2. Crear y mover entidades
  3. Gestionar la entrada y el tiempo
  4. Colisiones y estado del juego
← Volver a Learn Rust Coding