0Pricing
Learn Rust Coding · Pelajaran

Membuat dan Memindahkan Entitas

Tampilkan objek di layar.

Membuat dan Memindahkan Entitas adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn Rust Coding, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn Rust Coding mencakup 4 pelajaran total.

Commands: Pembuatan Entity yang Ditunda

Anda tidak dapat mengubah World secara langsung saat sistem berjalan secara paralel. Sebagai gantinya, antrekan perubahan struktural melalui Commands.

Pembuatan entity, penghapusan entity, dan penambahan komponen dicatat lalu diterapkan di akhir tahap jadwal agar akses tetap aman.

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

Membuat Entity dengan Bundle

Bundle adalah kelompok komponen yang disisipkan bersama. Bundle paling sederhana hanyalah tuple komponen.

Bevy memperlakukan setiap elemen tuple sebagai komponen yang dilampirkan, sehingga satu pemanggilan spawn dapat memberikan semua data awal kepada sebuah entity.

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

Kamera untuk Melihat

Tidak ada yang dirender tanpa kamera. Untuk gim 2D, buat Camera2d dalam sistem startup Anda.

Kamera itu sendiri adalah entity dengan komponen kamera — contoh lain dari keseragaman ECS. Semua yang ada dalam adegan adalah entity.

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

Membuat Sprite

Untuk menggambar sesuatu, berikan entity sebuah Sprite dan Transform. Transform menyimpan posisi, rotasi, dan skala dalam ruang dunia.

Sprite berwarna tidak memerlukan aset gambar, sehingga praktis untuk membuat prototipe pergerakan sebelum mengimpor karya seni.

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 vs Posisi Kustom

Dalam gim Bevy nyata, Anda biasanya menggerakkan Transform bawaan, bukan Position kustom, karena rendering membaca Transform secara langsung.

Translasinya berupa Vec3. Untuk 2D, ubah x dan y, lalu gunakan z untuk urutan penggambaran.

#[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;
    }
}

Melakukan Iterasi Query Secara Mutabel

Untuk mengubah data komponen, minta &mut T dan lakukan iterasi pada &mut query. Setiap item menghasilkan referensi mutabel.

Bevy menjamin bahwa tidak ada dua sistem yang memegang akses mutabel yang saling bertentangan secara bersamaan, sehingga perulangan ini aman meskipun sistem lain sedang berjalan.

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

Membuat Banyak Entity

Perulangan memungkinkan Anda mengisi sebuah level. Panggil spawn di dalam perulangan Rust for untuk membuat kisi rintangan atau kawanan musuh.

Setiap iterasi mengantrekan perintahnya sendiri, lalu semuanya diterapkan bersama-sama pada batas tahap.

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),
        ));
    }
}

Menghapus Entity

Hapus entity sepenuhnya dengan commands.entity(id).despawn(). Tindakan ini membebaskan komponennya dan menggunakan kembali indeks entity.

Biasanya Anda menghapus entity dari sistem yang melakukan query terhadap ID Entity tersebut, misalnya peluru yang keluar dari layar.

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

Menambahkan Komponen Kemudian

Anda dapat melampirkan komponen baru ke entity yang sudah ada saat runtime melalui insert. Beginilah cara Anda memberikan tag Shield kepada Player yang mendapatkan peningkatan kekuatan.

Penghapusan dilakukan dengan cara yang sama menggunakan remove::<T>(). Keduanya merupakan perubahan struktural, sehingga harus melalui Commands.

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

Z untuk Pelapisan

Dalam 2D, nilai z dari translasi transform menentukan urutan penggambaran. Nilai z yang lebih tinggi dirender di atas.

Berikan latar belakang nilai z yang rendah dan Player nilai yang lebih tinggi agar sprite tidak pernah menghilang di belakang pemandangan.

// 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)));

Merangkai Semuanya

Buat entity dalam Startup, lalu gerakkan dalam Update. Sistem startup membuat kamera dan entity satu kali; sistem update memajukannya pada setiap frame.

Pemisahan ini menjaga inisialisasi tetap berada di luar jalur panas per frame.

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

Pemeriksaan Singkat

Pikirkan bagaimana perubahan struktural diterapkan.

Rangkuman: Membuat dan Menggerakkan Entity

Anda membuat entity dengan bundle melalui Commands, merendernya dengan Sprite dan Transform, lalu menggerakkannya dengan mengubah transform dalam sistem Update.

Penghapusan entity dan penyisipan komponen juga merupakan perintah. Selanjutnya kita akan membuat pergerakan merespons input papan ketik dan waktu yang benar-benar berlalu.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membuat dan Memindahkan Entitas” gratis?

Ya — teks lengkap “Membuat dan Memindahkan Entitas” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn Rust Coding, upgrade ke CoddyKit PRO. Kursus Learn Rust Coding mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membuat dan Memindahkan Entitas”?

Tampilkan objek di layar. Kamu berlatih Learn Rust Coding dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Learn Rust Coding?

Tidak diperlukan pengalaman sebelumnya. Learn Rust Coding di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Membuat dan Memindahkan Entitas” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn Rust Coding ini?

Ya. Setiap pelajaran Learn Rust Coding menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pola Pikir ECS
  2. Membuat dan Memindahkan Entitas
  3. Menangani Masukan dan Waktu
  4. Tabrakan dan Keadaan Gim
← Kembali ke Learn Rust Coding