Mevcut FOSS bileşen tabanlı çerçeveler var mı? [kapalı]


25

Bileşen tabanlı oyun programlama paradigması çok daha popüler hale geliyor. Merak ediyordum, tekrar kullanılabilir bir bileşen çerçevesi sunan herhangi bir proje var mı? Herhangi bir dilde sanırım umrumda değil. Bu benim kendi projem için değil, sadece merak ediyorum.

Özellikle, bir baz Entitysınıf, bir baz Componentsınıf ve belki de bazı standart bileşenleri içeren projeler var mı? Tekerleği yeniden icat etmek istemiyorsanız ya da GraphicsComponentDirect3D ile çalışan bir oyun istiyorsanız , ancak bir düzine kez yapıldığını düşündüğünüz bir oyuna başlamak daha kolay olurdu .

Hızlı bir Googling Rusher'ı ortaya çıkarır . Bunu duyan var mı? Bunu kullanan var mı? Popüler olanlar yoksa, neden olmasın? Böyle bir şeyi tekrar kullanılabilir hale getirmek çok mu zor ve özelleştirme ihtiyacı var mı? Kendi uygulamamda, bir çerçeveye sürüklenebilecek çok sayıda kazan plakası buldum.


4
İlk yazan sen olmalısın! :)
Ricket

1
Kendi projem için bir tane C # yazdım. Belki hepimiz katkıda bulunabiliriz?
Tesserex

O C # projesi için çalışmaktan tamamen vazgeçtim. Evet, standart bir kişinin nasıl çalışması gerektiği konusunda büyük bir fikir birliği yoktur, ancak belki XNA'ya odaklanabiliriz (teknenizi ne yüzerse). Sırf devlerin yapmanın en iyi yolunu açıklamadıkları için, deneyemeyeceğimiz anlamına gelmez.
Michael Coleman

Belki de bileşen tabanlı tasarım, proje yöneticilerini programcılardan daha fazla
cezbettiği için

Yanıtlar:


45

Popüler olanlar yoksa, neden olmasın?

Çünkü böyle bir çerçevenin nasıl işleyeceği konusunda fikir birliğine benzer bir şey yok.

Gamedev.net'teki bir konu hakkında, insanlar bileşen tabanlı oyun sistemleri hakkında konuştuklarında, 3 farklı etkene dayanarak nasıl çalışmalarını beklediklerine ilişkin en az 8 olası izin olduğunu belirledim:

İç-dış-dış -bileşenler bir varlık olarak toplanmalı mı, yoksa bir alt sistemin parçası mı olmalı ve yalnızca bir varlık kimliği ile ilişkilendirilmeli mi?

Statik ve dinamik kompozisyon - varlıklar, iyi bilinen arayüzler üzerinden kodla iletişim kurabilen veya varlıklar eklenmiş bileşenlere isteğe bağlı miktarlarda sahip olabilirler. bunlar (ilgilenilen diğer bileşenleri bulmak için ilişkili stratejilerle)

Bileşen hakkındaki veriler ile varlık üzerindeki veriler - Veriler, üzerinde esas olarak çalışan bileşen tarafından tutulmalı mı? Yoksa veri, bütün bileşenler tarafından erişilebilen ortak bir alanda depolanmalı mı?

Bunun ötesinde, bileşenlerin nasıl iletişim kurmaları gerektiği (paylaşılan veriler aracılığıyla? İşlev işaretçileri yoluyla? Sinyaller / yuvalar yoluyla mı yoksa hiç değil mi?), Nasıl güncellemeleri gerekir (bileşen türüne göre sabit bir sırada? A Topluluğun oluşturduğu sırada tanımlanmış bir düzen düzeni mi?

Bu seçeneklerin her biri tamamen keyfidir ve bir sistemle yapabileceğiniz her şey diğerinde yapılabilir. Ancak bunu kodlama şekliniz her durumda oldukça farklıdır. Ve insanlar kendileri için hangi yolun en iyi şekilde çalıştığı konusunda güçlü görüşlere sahip görünüyorlar.

Şu anda insanlar hala bileşenlerin bir şekilde nesne yöneliminin (ki değil) yerine geçtikleri ve aynı zamanda oyunların geleneksel olarak nasıl yapıldığına (yine değillerdi) büyük bir değişim olduğunu hayal ettikleri fikrine kapılıyorlar. - insanlar, yaşları boyunca varlıklarındaki çeşitli alt sistemleri hesaba kattılar), bu nedenle çok fazla abartı ve fazla anlaşma yok. Belki birkaç yıl içinde işler düzelecek ve insanlar bir ya da iki standart yaklaşıma razı olacaklar.


1
Bu cevabın eski olduğunu takdir ediyorum, ama şimdi yanlış: popüler çerçeveler var ve konuyla ilgili çok az tartışma var. Oyun yazarken, yukarıdaki soruların çoğu önemli değil: ya kodun tasarımını etkilemezler ya da bir yaklaşım diğerlerinin olmadığı yerlerde hızlı ve tekrar kullanılabilir. Uygulamada, bir çok popüler Çerçeve vardır - diğer cevaplardan birine bağlı wiki iyi bir başlangıç ​​noktasıdır (birçoğumuz gerçek gönderilen oyunları + çerçeveleri bulmayı kolaylaştırmak için onu koruyoruz)
Adam

1
@Adam: Darwin'in evrim karşılaşmasını kazanan yaklaşımla ilgili detaylara bağlantı istiyorum. ayrıntılar söylediğimde, içten dışa ve dıştan duyma duymak istemiyorum, karma haritalar, vektörler, ayırıcılar, özel, genel, döngüler, const ... duymak istiyorum.
v.oddou

@ v.oddou birisi zaten cevap olarak wiki'ye bir link gönderdi (aşağıya bakınız). Detaylar ister misin? Kaynak koduyla dolu .
Adam,

10

Tüm bunlardan örnekler toplayan bir wiki var:

http://entity-systems.wikidot.com/

... farklı yaklaşımlar arasındaki farkların açıklamalarıyla birlikte.


Ash ve Artemis (her ikisi de wiki'de), her ikisi de ticari oyun geliştirme için kullanılan hobi oyunu dev ile birlikte gerçekten popüler oldu.
Adam,

4

Bu mimariyle ilgili bulduğum çerçeveleri inceleyin ...

www.burgerengine.com

PushButtonEngine

Arthemis Framework - https://github.com/artemis-esf/artemis-framework/tree/master/src/com/artemis

Unity Api'ye bir göz atmak. Bileşen tabanlı mimari ile ilgili pek çok şey bulabilirsiniz. (Birisini bulur bulmaz listeyi güncelleyeceğim ...)

Güncelleştirme:

      https://code.google.com/p/spartanframework/

Bu, varlık sistemlerini iyi bir şekilde açıklar ... http://piemaster.net/2011/07/entity-component-primer/


2

Flash için Buton Motoru var: http://pushbuttonengine.com/

Ve c ++ / python için Panda3D var: panda3d dot com (üzgünüm, yalnızca bir n00b olarak gönderim başına 1 url'ye izin veriliyor)

Orada daha fazla ton olduğuna eminim :)

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.