Creare e muovere entità
Porti gli elementi sullo schermo.
Creare e muovere entità è una lezione Learn Rust Coding gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn Rust Coding, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn Rust Coding include 4 lezioni in totale.
Commands: creazione differita
Non potete modificare direttamente il World mentre i sistemi vengono eseguiti in parallelo. Accodate invece le modifiche strutturali tramite Commands.
La creazione, la rimozione e l'aggiunta di componenti vengono registrate e applicate al termine della fase dello schedule, mantenendo sicuro l'accesso ai dati.
fn setup(mut commands: Commands) {
commands.spawn_empty();
}Creare entità con un bundle
Un bundle è un gruppo di componenti inseriti insieme. Il bundle più semplice è una semplice tupla di componenti.
Bevy tratta ogni elemento della tupla come un componente da associare, quindi una singola chiamata a spawn può fornire a un'entità tutti i dati iniziali.
fn setup(mut commands: Commands) {
commands.spawn((
Position { x: 0.0, y: 0.0 },
Velocity { x: 1.5, y: 0.0 },
Player,
));
}Una camera per vedere
Nulla viene renderizzato senza una camera. Nei giochi 2D create una Camera2d nel sistema di startup.
Anche la camera è un'entità con componenti relativi alla camera: un altro esempio dell'uniformità di ECS. Ogni elemento della scena è un'entità.
fn setup(mut commands: Commands) {
commands.spawn(Camera2d::default());
}Creare uno sprite
Per disegnare qualcosa, assegnate a un'entità Sprite e Transform. Il transform contiene posizione, rotazione e scala nello spazio del mondo.
Per uno sprite colorato non serve alcuna risorsa immagine, una soluzione utile per creare un prototipo del movimento prima di importare la grafica.
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 e posizione personalizzata
Nei giochi Bevy reali di solito si sposta il Transform integrato anziché una Position personalizzata, perché il rendering legge direttamente Transform.
La traslazione è un Vec3. Nei giochi 2D modificate x e y e usate z per l'ordine di disegno.
#[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;
}
}Iterare una query in modo mutabile
Per modificare i dati di un componente, richiedete &mut T e iterate su &mut query. Ogni elemento restituisce riferimenti mutabili.
Bevy garantisce che due sistemi non mantengano contemporaneamente accessi mutabili in conflitto, quindi questo ciclo è sicuro anche mentre vengono eseguiti altri sistemi.
fn move_all(mut q: Query<&mut Transform, With<Player>>) {
for mut tf in &mut q {
tf.translation.x += 1.0;
}
}Creare molte entità
I cicli consentono di popolare un livello. Chiamate spawn all'interno di un ciclo Rust for per creare una griglia di ostacoli o uno sciame di nemici.
Ogni iterazione accoda il proprio comando e tutti i comandi vengono applicati insieme al confine della fase.
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),
));
}
}Rimuovere entità
Rimuovete completamente un'entità con commands.entity(id).despawn(). In questo modo liberate i suoi componenti e riciclate l'indice dell'entità.
In genere rimuovete l'entità da un sistema che ne ha richiesto l'Entity id, ad esempio quando un proiettile esce dallo schermo.
fn cleanup(mut commands: Commands, q: Query<(Entity, &Transform)>) {
for (e, tf) in &q {
if tf.translation.y > 600.0 {
commands.entity(e).despawn();
}
}
}Aggiungere componenti in seguito
Potete associare nuovi componenti a un'entità esistente durante l'esecuzione tramite insert. È così che assegnate il tag Shield a un giocatore potenziato.
La rimozione funziona allo stesso modo con remove::<T>(). Entrambe sono modifiche strutturali, quindi passano attraverso Commands.
commands.entity(player).insert(Shield { hits: 3 });
// later
commands.entity(player).remove::<Shield>();Z per la stratificazione
Nel 2D, il valore z della traslazione di un transform determina l'ordine di disegno. Un valore z più alto viene renderizzato sopra gli altri.
Assegnate allo sfondo un z basso e al giocatore un valore più alto, così gli sprite non scompariranno mai dietro lo scenario.
// 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)));Collegare tutto
Create le entità in Startup e spostatele in Update. Il sistema di startup crea una volta sola la camera e le entità; il sistema di update le aggiorna a ogni frame.
Questa separazione mantiene l'inizializzazione al di fuori del percorso critico eseguito a ogni frame.
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.add_systems(Update, apply_velocity)
.run();Verifica rapida
Riflettete su come vengono applicate le modifiche strutturali.
Riepilogo: creare e spostare
Create le entità con bundle tramite Commands, eseguite il rendering con Sprite e Transform e spostatele modificando il transform in un sistema Update.
Anche la rimozione e l'inserimento dei componenti avvengono tramite comandi. Ora faremo reagire il movimento all'input da tastiera e al tempo realmente trascorso.
Domande Frequenti
La lezione «Creare e muovere entità» è gratuita?
Sì — il testo completo di «Creare e muovere entità» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn Rust Coding, passa a CoddyKit PRO. Il corso Learn Rust Coding include 4 lezioni in totale.
Cosa imparerò in «Creare e muovere entità»?
Porti gli elementi sullo schermo. Eserciti Learn Rust Coding con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn Rust Coding?
Non è richiesta alcuna esperienza precedente. Learn Rust Coding su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Creare e muovere entità»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn Rust Coding?
Sì. Ogni lezione Learn Rust Coding include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- La mentalità ECS
- Creare e muovere entità
- Gestire input e tempo
- Collisioni e stato del gioco