ECS Yaklaşımı
Varlıklar, bileşenler ve sistemler.
ECS Yaklaşımı, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.
ECS'nin Çözdüğü Sorun
Bevy, Entity Component System (ECS) düzeni üzerine kuruludur. Derin kalıtım hiyerarşileri yerine davranışı küçük ve bağımsız veri parçalarından oluşturursunuz.
Veri odaklı bu tasarım, bellek düzenini önbellek dostu tutar ve altyapının işi neredeyse hiçbir ek maliyet olmadan CPU çekirdekleri arasında paralelleştirmesine olanak tanır.
Varlıklar Yalnızca Kimliktir
entity, yalnızca hafif bir tanımlayıcıdan, yani nesil bilgili bir dizinden ibarettir. Hiçbir verinin sahibi değildir ve kendi başına bir davranışı yoktur.
Bunu bir veritabanı satırındaki anahtar gibi düşünün. Bu anahtara eklenen bileşenler, "Player" veya "Bullet" gibi varlığa anlam kazandırır.
// An Entity is a tiny handle
struct Entity {
index: u32,
generation: u32,
}Bileşenler Yalın Veridir
Bileşenler, Component türeten sıradan Rust yapılarıdır. Durum taşırlar ancak mantık içermezler.
Bileşenleri küçük ve amaca odaklı tutun. Konum, hız ve sağlık değeri tek bir büyük yapı yerine üç ayrı bileşen olmalıdır.
use bevy::prelude::*;
#[derive(Component)]
struct Position { x: f32, y: f32 }
#[derive(Component)]
struct Velocity { x: f32, y: f32 }Sistemler Mantığı Barındırır
Sistemler, bileşenler üzerinde çalışan sıradan işlevlerdir. Tüm oyun mantığınız burada bulunur.
Bevy, hangi verilere eriştiğini belirlemek için her sistemin parametrelerini inceler ve çakışmayan sistemleri paralel çalışacak şekilde zamanlar.
fn move_system(mut query: Query<(&mut Position, &Velocity)>) {
for (mut pos, vel) in &mut query {
pos.x += vel.x;
pos.y += vel.y;
}
}Sorgular: Veri İsteme
Bir Query, belirli bir bileşen kümesine sahip varlıkları bildirimsel olarak ister. Bevy yalnızca eşleşen varlıkları döndürür.
&T ile paylaşımlı erişim veya &mut T ile özel erişim isteyebilirsiniz. Bu ödünç alma bilgisi, paralel zamanlayıcıyı yönlendirir.
// 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);
}
}Sorguları Filtreleme
Bir Query türünün ikinci tür parametresi bir filtredir. O bileşenin verisini ödünç almadan sonuçları daraltmak için With ve Without kullanın.
Bu, varlığın rolünü belirten boş yapılar olan etiket bileşenleri için idealdir.
#[derive(Component)]
struct Player;
fn player_only(query: Query<&Position, With<Player>>) {
for pos in &query {
info!("player at {},{}", pos.x, pos.y);
}
}Kaynaklar: Genel Durum
Bazı veriler tüm oyun için tektir: skor, geçen süre veya oyun ayarları gibi. Bunlar bileşenler yerine resources olarak tutulur.
Sistemlerde okuma erişimi için Res<T>, yazma erişimi için ResMut<T> kullanarak bunlara erişin.
#[derive(Resource)]
struct Score(u32);
fn show_score(score: Res<Score>) {
info!("Score: {}", score.0);
}Uygulama Oluşturucu
Her şey App içinde birbirine bağlanır. Eklentiler ekler, kaynaklar yerleştirir ve sistemleri bir zamanlamaya kaydedersiniz.
DefaultPlugins, pencere yönetimini, görüntülemeyi, girdiyi ve zamanı sağlayarak sizin oyuna odaklanmanıza olanak tanır.
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.insert_resource(Score(0))
.add_systems(Update, show_score)
.run();
}Zamanlamalar: Başlangıç ve Güncelleme
Sistemler zamanlamaların içinde çalışır. Startup, uygulama başlatıldığında bir kez çalışır; dünyayı oluşturmak için idealdir.
Update her karede çalışır ve hareket, girdi ile mantığın yeridir. Bevy ayrıca belirlenebilir fizik adımları için FixedUpdate sunar.
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.add_systems(Update, move_system)
.run();Bileşim Neden Kazanır
Zehirlenebilen uçan bir düşman mı istiyorsunuz? Flying ve Poisoned bileşenlerini eklemeniz yeterlidir. Yeni bir sınıfa veya kalıtım zincirine gerek yoktur.
Davranış, hangi sistemlerin hangi bileşen bileşimleriyle eşleştiğinden ortaya çıkar. Bu, özelliklerin eklenmesini ve yeniden düzenlemelerin düşük maliyetli olmasını sağlar.
// Same systems, new combinations
commands.spawn((Position{x:0.0,y:0.0}, Velocity{x:1.0,y:0.0}, Flying, Poisoned));Ücretsiz Paralellik
Her sistem veri erişimini bildirdiği için Bevy'nin zamanlayıcısı hangi sistemlerin çakıştığını bilir. Çakışmayan sistemler otomatik olarak farklı iş parçacıklarında çalışır.
Siz tek iş parçacıklı görünen kod yazarsınız; altyapı ise ödünç alma bildirimlerinizden paralelliği çıkarır. Kilit veya elle iş parçacığı yönetimi gerekmez.
Kısa Kontrol
ECS rollerini anlayıp anlamadığınızı test edin.
Özet: ECS Bakış Açısı
Varlıklar kimlik, bileşenler veri, sistemler mantık ve kaynaklar genel durumdur. App, bunları zamanlamalar aracılığıyla birbirine bağlar.
Küçük bileşenleri birleştirip sistemlerin bunlarla eşleşmesine izin verdiğinizde esnek, paralel ve önbellek dostu oyunlar elde edersiniz. Sırada varlıklar oluşturup onları hareket ettirmek var.
Yapay zeka eğitmeniyle Rust öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 39
- Dersler
- 144
Sıkça Sorulan Sorular
“ECS Yaklaşımı” dersi ücretsiz mi?
Evet — “ECS Yaklaşımı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.
“ECS Yaklaşımı” dersinde ne öğreneceğim?
Varlıklar, bileşenler ve sistemler. Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“ECS Yaklaşımı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.