Pola Pikir ECS
Entitas, komponen, dan sistem.
Pola Pikir ECS adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 1 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.
Masalah yang Diselesaikan ECS
Bevy dibangun berdasarkan pola Entity Component System (ECS). Alih-alih hierarki pewarisan yang dalam, Anda menyusun perilaku dari bagian-bagian data kecil yang independen.
Desain yang berorientasi pada data ini menjaga tata letak memori agar ramah cache dan memungkinkan mesin menjalankan pekerjaan secara paralel di berbagai inti CPU dengan biaya yang hampir tidak berarti.
Entity Hanyalah ID
Sebuah entity tidak lebih dari pengenal ringan — indeks bergenerasi. Entity tidak memiliki data dan tidak memiliki perilaku sendiri.
Anggaplah entity sebagai kunci dalam satu baris basis data. Komponen yang dilampirkan pada kunci tersebut memberikan makna kepada entity, seperti "Player" atau "Bullet".
// An Entity is a tiny handle
struct Entity {
index: u32,
generation: u32,
}Komponen Adalah Data Murni
Komponen adalah struct Rust biasa yang menurunkan Component. Komponen membawa status, tetapi tidak berisi logika.
Buat komponen tetap kecil dan terfokus. Posisi, kecepatan, dan nilai kesehatan merupakan tiga komponen terpisah, bukan satu struct monolitik.
use bevy::prelude::*;
#[derive(Component)]
struct Position { x: f32, y: f32 }
#[derive(Component)]
struct Velocity { x: f32, y: f32 }Sistem Menyimpan Logika
Sistem adalah fungsi biasa yang beroperasi pada komponen. Di sinilah seluruh logika gim Anda berada.
Bevy memeriksa parameter setiap sistem untuk mengetahui data yang disentuhnya, lalu menjadwalkan sistem yang tidak saling bertentangan agar berjalan secara paralel.
fn move_system(mut query: Query<(&mut Position, &Velocity)>) {
for (mut pos, vel) in &mut query {
pos.x += vel.x;
pos.y += vel.y;
}
}Query: Meminta Data
Query secara deklaratif meminta entity yang memiliki kumpulan komponen tertentu. Bevy hanya mengembalikan entity yang cocok.
Anda dapat meminta akses bersama dengan &T atau akses eksklusif dengan &mut T. Informasi peminjaman ini menggerakkan penjadwal paralel.
// Entities with BOTH Position and Velocity
fn report(query: Query<(&Position, &Velocity)>) {
for (pos, vel) in &query {
info!("at {},{} moving {},{}", pos.x, pos.y, vel.x, vel.y);
}
}Memfilter Query
Parameter tipe kedua dari Query adalah filter. Gunakan With dan Without untuk mempersempit hasil tanpa meminjam data komponen tersebut.
Ini ideal untuk komponen penanda — struct kosong yang menandai peran suatu entity.
#[derive(Component)]
struct Player;
fn player_only(query: Query<&Position, With<Player>>) {
for pos in &query {
info!("player at {},{}", pos.x, pos.y);
}
}Resources: Status Global
Sebagian data bersifat unik untuk seluruh gim — skor, waktu yang telah berlalu, atau pengaturan gim. Data ini disimpan sebagai resources, bukan komponen.
Akses data tersebut dalam sistem dengan Res<T> untuk akses baca atau ResMut<T> untuk akses tulis.
#[derive(Resource)]
struct Score(u32);
fn show_score(score: Res<Score>) {
info!("Score: {}", score.0);
}Pembuat App
Semuanya dirangkai dalam App. Anda menambahkan plugin, menyisipkan resource, dan mendaftarkan sistem pada sebuah jadwal.
DefaultPlugins menyediakan pengelolaan jendela, rendering, input, dan waktu sehingga Anda dapat berfokus pada gameplay.
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.insert_resource(Score(0))
.add_systems(Update, show_score)
.run();
}Jadwal: Startup vs Update
Sistem berjalan di dalam jadwal. Startup berjalan sekali saat aplikasi diluncurkan — sangat cocok untuk membuat dunia.
Update berjalan pada setiap frame dan menjadi tempat untuk pergerakan, input, serta logika. Bevy juga menyediakan FixedUpdate untuk langkah fisika yang deterministik.
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.add_systems(Update, move_system)
.run();Mengapa Komposisi Lebih Unggul
Ingin musuh terbang yang dapat diracuni? Cukup lampirkan komponen Flying dan Poisoned. Tidak perlu class baru atau rantai pewarisan.
Perilaku muncul dari sistem mana yang cocok dengan kombinasi komponen mana. Hal ini membuat fitur dapat ditambahkan dan refaktor menjadi murah.
// Same systems, new combinations
commands.spawn((Position{x:0.0,y:0.0}, Velocity{x:1.0,y:0.0}, Flying, Poisoned));Paralelisme Tanpa Biaya Tambahan
Karena setiap sistem mendeklarasikan akses datanya, penjadwal Bevy mengetahui sistem mana yang saling bertentangan. Sistem yang tidak bertentangan otomatis berjalan pada thread yang berbeda.
Anda menulis kode yang tampak berjalan pada satu thread, lalu mesin mengekstrak paralelisme dari deklarasi peminjaman Anda. Tidak ada kunci dan tidak ada pembuatan thread manual.
Pemeriksaan Singkat
Uji pemahaman Anda tentang peran ECS.
Rangkuman: Pola Pikir ECS
Entity adalah ID, komponen adalah data, sistem adalah logika, dan resource adalah status global. App menghubungkan semuanya melalui jadwal.
Dengan menyusun komponen-komponen kecil dan membiarkan sistem mencocokkannya, Anda mendapatkan gim yang fleksibel, paralel, dan ramah cache. Selanjutnya kita akan membuat entity dan membuatnya bergerak.
Belajar Rust dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 39
- Pelajaran
- 144
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pola Pikir ECS” gratis?
Ya — teks lengkap “Pola Pikir ECS” 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 “Pola Pikir ECS”?
Entitas, komponen, dan sistem. 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 1 dari 4.
Berapa lama pelajaran “Pola Pikir ECS” 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.