Mevcut projem için, bileşen / varlık tabanlı bir sistem uyguladım , temelde bu oldukça tanımlanmamış alanda en iyi uygulamanın çoğunu takip ediyorum .
(Hafifçe genişletilmiş) var ben Yani Varlıkları temelde bir olan, int
kimliği, bir insan tarafından okunabilir ismi, bir std::map
bileşenlerin ve long
bileşenleri mevcut ne göstermek için kullanılır "tipi göstergesi" (İki kişilik bir güce sahip enum
bileşenler herkes için Varlığa her bileşen eklendiğinde, otomatik olarak bu uzun bit işlemlerle değiştiririm, bu cevabı karşılaştırın ).
Sonra Bileşenler de var, oldukça basit: int
ID, enum
bileşen türü, üst Entity pointer ve std::map
bu bileşenin sahip olduğu tüm özelliklerin bir.
Son olarak , gerçek mantık işlemeyi gerçekleştiren bazı Sistemler / Yöneticiler . Önce o anda işlenen Varlığın eşleşen bir long
"tip göstergesi" olup olmadığını kontrol ederler = bu sistem için gerekli tüm bileşenler mevcut. Daha sonra gerekirse bazı özelliklere erişir ve ilgili bileşendeki bazı işlevleri doğrudan çağırır veya bazı iletiler gönderir (bir ileti dağıtıcısı aracılığıyla).
Alt satır: Buraya kadar, veri odaklı bir yaklaşımla birleştirilen oldukça standart bir olay güdümlü bileşen / varlık tabanlı sistem (karşılaştırın, bileşenlerin sabit kodlanmış veri değişkenleri değil, bunun yerine (bazı) bileşenler olarak genel bir harita / bileşenlerin arketipleri daha sonra gerçek bileşen kodunun bir parçası olmayan ek veri ekleme seçeneğiyle dosyalardan okunacaktır.
Şimdi de bu projeye Davranış Ağaçları ( AiGameDev BTSK tabanlı) tanıtmak istiyorum , ancak zaten var olan bileşenlere nasıl bağlanacakları ve nasıl bağlanmaları veya bu tasarımın genel olarak nasıl entegre edileceğinden emin değilim.
İlgili birkaç fikir / nokta / soru akla geliyor:
BT'lerim dosyalardan okunacak (tekrar). Şu anda en iyi nasıl
BT Action
bu ağaçtaki bir ve benim uygulama gerçek kodlama arasındaki bağlantıyı görmek zor bir zaman var . BT dosyalarında kullanılan eylem adları ile gerçek mantık uygulamasının bir işlev işaretçisi arasında bir tür harita oluşturmalı mıyım? Bunu çözmek için olağan yaklaşım nedir?Tüm farklı tiplerim için BT'ler oluşturmak zorunda olacağımı varsayıyorum
Entity
(bu yüzden, birden fazla kez bahsedilen uzun "tip göstergesi" ile gösterildiği gibi her oyun-mantık / AI ile ilgili bileşen kombinasyonu için). SonuçBT Action
olarak, eylem başına birçok bileşenin dahil edileceği için uygulamaları bileşenlere koymak mantıklı değil , değil mi?Peki,
BT Action
mantık bir / birden fazla ayrı sistemde oturmalıdır (1 numaralı fikirden gelen haritayı kimin işaret ettiği)? Sistem daha sonra BT'nin şu anda kontrol edildiği ve belirli bir eylemi yürütmesi söylenen (sistemdeki = yöntem) gerçekten buna izinlong
verilipEntity
verilmediğini (= gerekli bileşenlere sahip) benim "tip göstergeme" göre kontrol eder. Ancak, değilse, (örneğin BT yaratıcısı, gerekli bir bileşenin çalışma zamanında artık Varlığa eklenemeyeceği belirli bir durumu göz ardı ettiği için) hiçbir şey olmaz.
Sorular:
- Bu tür bir entegrasyon için kanıtlanmış kavramlar var mı?
- Yukarıdaki 3 puanımı nasıl alıyorsunuz?
- Genel olarak bileşen / varlık tabanlı tasarımımla ilgili akla gelen başka şeyler var mı?