Açık kaynaklı bileşen tabanlı oyun veya motorlar?


15

Bileşen tabanlı oyun tasarımı hakkında bir şeyler okudum ama hala tam olarak nasıl uygulayacağınızı anlamakta sorun yaşıyorum. Bunu daha iyi hissetmek için okuyabileceğim bileşen tabanlı oyunların veya oyun motorlarının iyi örnekleri var mı?

Yanıtlar:


7

Şahsen iyi örnekler olduğunu düşünmüyorum , çünkü oyunlar için "bileşen tabanlı bir sistem" tanımı o kadar gevşek bir şekilde tanımlanmış ki hiçbir şeyin yanında olamaz.

Bu yanıttaki tartışmanın bir kısmını yararlı bulabilirsiniz: Web oyunundaki öğeler için bileşen tabanlı bir sistem nasıl uygulanır?

Genel olarak, yaklaşım, tüm davranışları, davranışı gerçekleştiren nesneleri tutan daha basit bir sınıfa dönüştüren büyük bir sınıftan herhangi bir GameObject veya Actor türünü değiştirmektir. Bunu kendiniz yapmak ve oyununuza uygun farklı bileşenler yapmak genellikle ilerlemenin en iyi yolu olacağını düşünüyorum.


Onu duydum. Üzerinde iyi kaynaklar bulmaya çalışırken, hemen hemen her insanın şeyleri tanımlamak için farklı terminoloji kullandığını buldum. Temel yapıları çevirmek için zaman harcadığınızda farklı uygulamaları karşılaştırmayı zorlaştırdık. Varlık Sistemi, Bileşen Sistemi, Oyun Nesnesi, Şablon, Montaj, Bileşen Toplama, vb ...
Leniency

2

Hoşunuza gidebilecek bazı kaynaklar şunlardır:
İşte bu muhteşem iş parçacığı. Bu bir oyun motoru değil, tasarım ve tartışma harika. Çok benzer bir konuda StackOverflow ile ilgili bir
soru .

Orijinal soruyu cevaplamak için, C #'daki Fil çerçevesi tam olarak istediğiniz şeydir: kesildi, ancak uygulama referansı için burada hala var .


1

Bu site temel bir uygulamaya başlar.

Yukarıdakilerin çoğu T = Machine'deki bu makaleden esinlenmiştir.

Yukarıdaki iki bağlantıdan esinlenerek temel bir uygulamaya başladım. Saf bileşen sistemleri teorisinden çok fazla saptığımdan eminim ve şüphesiz hatalar var, ancak bazı basit örnekler arıyorsanız faydalı olabilir.

Bricle (C # / XNA)

Şu anda sadece bazı temel varlıkları yüklüyor, aradığınız ana yerleridir vb bazı olayları ele Engine.EntitySystem klasör ve muhtemelen Oynatma ekranında kişiler aslında oluşturulur.

Basit bir tür tabanlı bileşen deposu oluşturmak ve ortak bir EntityManager'ın arkasına saklamak nispeten düzdür.

Karşılaştığım ilk zorluk, münferit sistemlerin birden çok bileşen türüne (yani Fiziksel bileşenler ve InputMoveable) ihtiyaç duyduğu durumdu. İlişkisel veritabanı dilini kullanmak için JOIN sorgusu yapmanın bir yolunu bulmak zorundaydım. Bunun için, eşleşen bileşen türü sorgularından oluşturulan varlıklar için başka bir koleksiyon türü yaptım - her varlık koleksiyonu bir OnEntityCreate olayına bağlanır ve eşleşip eşleşmediğini denetler. Hala bazı hatalar var.

İkinci zorluk aslında bir 'oyun nesnesi' yaratmaktı - onlara şablonlar adını verdim. Burada muhtemelen T = Machine'in özelliklerine göre çok saf değilim, ama işe yarıyor gibi görünüyor. Şablonlar, bileşen örneklerini bir araya getirir ve varlık kompozisyonunun daha kolay olmasını sağlar (yani Top Çekilebilir ve Fizikseldir).

Umarım bu yararlıdır - varlık / bileşen sistemleri bazı engelleri aşmak için bir zorluk olabilir.


1

Bir diğeri, ben kullanmadım, ama biraz kod baktım, Artemis . İyi yorumlanmış ve oldukça aktif. Başlangıçta bir Java çerçevesi ancak C # / XNA'ya taşındı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.