Varlık sistemleri hakkında iki soru sorduktan ( 1 , 2 ) ve bunlarla ilgili bazı makaleleri okuduktan sonra, onları öncekinden daha iyi anladığımı düşünüyorum. Hala bir parçacık yayıcı, bir giriş sistemi ve bir kamera oluşturmak konusunda hala bazı belirsizliklerim var. Açıkçası, varlık sistemlerini anlamada hala bazı problemlerim var ve bunlar diğer tüm nesneler için geçerli olabilir, ancak bu üçünü seçtim çünkü bunlar çok farklı kavramlar, oldukça geniş bir temeli kapsamalı ve varlık sistemlerini ve nasıl anlamayı anlamama yardım etmeli Bu gibi problemleri kendim hallederken halledebiliriz.
JavaScript'te bir motor yapıyorum ve aşağıdakileri içeren temel özelliklerin çoğunu uyguladım: giriş işleme, esnek animasyon sistemi, parçacık yayıcı, matematik sınıfları ve işlevleri, sahne kullanımı, kamera ve görüntü oluşturma ve bir sürü ürün motorların genellikle desteklediği şeylerden. Byte56'nin cevabını okudum, bu da motoru bir varlık sistemine dönüştürmekle ilgilendi. Temel sahne felsefesiyle hala bir HTML5 oyun motoru olarak kalacaktı, ancak bileşenlerden dinamik varlık yaratmayı desteklemesi gerekiyor.
Şu andaki sorun, eski motor konseptimi bu yeni programlama paradigmasına sığdırmak. Bunlar önceki soruların tanımlarından bazıları, güncellenmiş:
Bir varlık bir tanımlayıcıdır. Herhangi bir veriye sahip değil, bir nesne değil, tüm varlıkların sahneler listesindeki bir dizini temsil eden basit bir kimlik (aslında bir bileşen matrisi olarak uygulamayı planlıyorum).
Bir Bileşen bir veri taşıyıcısıdır, ancak bu veriler üzerinde çalışabilen yöntemlerle. En iyi örnek bir
Vector2D
veya "Konum" bileşenidir. Bu veriler içeriyor:x
vey
, ama biraz daha kolay veri üzerinde işlem yapmak da bazı yöntemleri:add()
,normalize()
, vb.Bir Sistem belirli gereksinimleri karşılaması varlıklar kümesi üzerinde işlem bir şeydir; genellikle işletmelerin çalıştırılmak üzere belirli bir bileşen setine sahip olmaları gerekir. Sistem "mantık" kısmı, "algoritma" kısmıdır, bileşenlerin sağladığı tüm işlevler tamamen kolay veri yönetimi içindir.
Kamera
Kamera bir Vector2D
konum özelliğine, bir dönüş özelliğine ve onu bir nokta etrafında ortalamak için bazı yöntemlere sahiptir. Her kare, bir sahneyle birlikte bir işleyiciye beslenir ve tüm nesneler konumuna göre çevrilir. Sahne daha sonra oluşturulur.
Bir varlık sisteminde bu tür bir nesneyi nasıl temsil edebilirim? Kamera bir varlık mı, bir bileşen mi, yoksa kombinasyon olur mu ( cevabım gereğince )?
Parçacık Verici
Parçacık vericimde yaşadığım sorun, yine ne olması gerektiğidir. 10.000'den fazla kişiyi desteklemek istediğim için parçacıkların kendilerinin varlık olmaması gerektiğinden oldukça eminim ve bu kadar fazla varlık yaratmanın performansım üzerinde büyük bir darbe olacağına inanıyorum.
Bir varlık sisteminde bu tür bir nesneyi nasıl temsil edebilirim?
Giriş Yöneticisi
En son konuşmak istediğim, girdilerin nasıl kullanılması gerektiği. Motorun şu anki versiyonunda, denilen bir sınıf var Input
. Tuşlara basma ve fare konumu değişikliği gibi tarayıcı olaylarına abone olan ve aynı zamanda bir iç durumu koruyan bir işleyicidir. Ardından, oyuncu sınıfı react()
bir giriş nesnesini argüman olarak kabul eden bir yönteme sahiptir . Bunun avantajı, giriş nesnesinin .JSON'a serileştirilebilmesi ve daha sonra ağ üzerinden paylaşılarak düzgün çok oyunculu simülasyonlara izin vermesidir.
Bu nasıl bir varlık sistemine dönüşüyor?