Varlık bileşen sistemlerini temsil etmenin ve uygulamanın çok sayıda yolu vardır, ancak burada bir yolun açıklaması bulunmaktadır. Unutmayın, varlık / bileşen / sistem mimarilerinin somut bir tanımı yoktur, bu yüzden bu sadece bir uygulama.
Varlık / bileşen / sistem mimarileri için yardımcı olabilecek bir analoji tanıtacağım. Anahtar gibi bir varlık düşünelim.
Varlık
Anahtarlar ayrıca dişlere sahiptir (koyu mavi). Varlık anahtarımızın dişleri, onu oluşturan bileşenlerdir. Aynı dişlere sahip olsalar bile varlıklarına kimlikleriyle ayırabilirsiniz. Peki anahtarlar neye uyuyor? Kilitler. Kilitler bizim sistemimizdir. Örneğin, bir hareket sistemi.
Sistem
Kilit sadece anahtarımız hem konum hem de hız için dişe sahipse çalışır. Bu sistem sadece pozisyonu ve hızı olan varlıkları işler. Bu sistemlerin hangi varlıkların işleneceğini nasıl tanıdığını ayarlamanın birden fazla yolu vardır, ancak bunun bir yolu kullanmaktır long
. Her bit bir bileşen türü için ayrılmıştır. Örneğimize göre, 64 bit uzunluğunda bir 4 bit tür üstlenelim. Örnek varlığımız mevcut tüm bileşenlere sahip olacaktır. Bu yüzden anahtar olurdu 1111
. Ardından, sistem, sahip olan herhangi bir varlık için arıyor 11--
. ( -
Temsil umursamıyor, çünkü hareket bir sprite veya sağlık olup olmadığını umursamıyor). Basit bir AND
işlemle bir varlığı kontrol edebilir . Yani bizim varlığımız eşleşiyorsa ((1111 & 1100) == 1100)
. Seni kaybettiysem bitsel işlemler hakkında biraz daha kontrol et .
Gördüğünüz gibi, sistemlerin dış kaynaklara erişimi var. Zamana, grafiklere, sese vb. Erişebilirler. Onlar sadece bir seferde bir anahtar alan ve işlem yapan küçük işlemcilerdir. Hareket sisteminin hız, delta zaman ve konum aldığını görüyorsunuz; daha sonra bazı hesaplamaları yapar ve sonucu tekrar konumuna kaydeder.
Varlık anahtarlarını oluşturmak gerçekten kolaydır. İstediğiniz zaman ekleyebilir veya kaldırabilirsiniz. İşletme umursamıyor, sadece bileşenleri gruplandırmanın ve tutmanın bir yolu. Bileşenlerin birbirine bağımlılığı yoktur. Bileşenlerin birbirleriyle etkileşime en yakın olduğu şey, bir sistemin kendileri üzerinde çalıştığı ve hareket örneğimizde olduğu gibi birinden diğerini güncellemek için verileri kullandığı zamandır.
Bu fikri sağlamlaştırmak için başka bir sisteme göz atalım:
Bu bizim çizim sistemimiz. Eşleşen bileşenleri arar 1-1-
. Bu varlık eşleşir çünkü: ((1111 & 1010) == 1010)
Ek olarak, varlık sprite'ı konumuna çekerek bu sistemin ekrana bilgi verdiğini görebilirsiniz.
Tamam, bir tane daha. Başka bir işletmeye bakalım ve şimdiye kadar bizim örneğimize nasıl uyduğunu görelim.
Gördüğünüz gibi, bu işletmenin kendisine bağlı daha az bileşeni var. Sahip olduğu bileşenlere bakarak, kaya gibi statik bir ürün olabileceği anlaşılıyor. Sadece bir konumu ve sprite var. Hareket etmeyecek ve herhangi bir sağlık değişikliğinden etkilenmeyecek. Bu işletme, 1010'un anahtarını üretecektir. Peki, bu varlık üzerinde hangi sistemler çalışıyor? Hadi kontrol edelim:
Hareket sistemimize karşı:
((1010 & 1100) != 1100)
Hayır. Hareket sistemi bu varlığı önemsemiyor, çünkü gerekli bileşenlere sahip değil.
Çizim sistemimize karşı:
((1010 & 1010) == 1010)
Hey, bu bir eşleşme. Bu varlık çizim sistemi tarafından işletilecektir. Çizim sistemi sprite tanımlanmış pozisyonda çizer.
Umarım, şimdi bileşenlerimizi alan ve üzerinde çalışan başka bir sistem eklemenin ne kadar kolay olduğunu görebilirsiniz. Sorularınıza cevap verdiğime emin olalım:
Birden fazla sistemin aynı bileşene erişmesi gerekiyorsa ne olur? Veriler nerede yayınlanmalı?
Tipik olarak, sistemler birbiri ardına çalışır. Gereksinimlerine uyan tüm varlıkları işlerler, sonra bir sonraki sistem de aynısını yapar. Veri varlık ile birlikte yaşıyor. Sistemde depolanan herhangi bir şey olmamalıdır, sadece döndürülen bir kilit, anahtar bilginin kaldığı ve kilitten kilide geçtiği yerdir.
Varlıklar nasıl inşa edilir? Sistemler gerçekten bir bileşene bağlı mı? Yeni bir bileşen tanıtmak istersem, yeni bir sistem tanıtmak veya mevcut bir bileşeni de değiştirmek zorunda mıyım?
Varlıklar sadece bileşen torbalarıdır. Benzersiz bir kimlikleri ve bir bileşen listesi var. Sistemler yalnızca yukarıda açıklanan şekilde bileşenlere bağlanır. Üzerinde çalışan sistemler olmadan bileşenlere sahip olabilirsiniz, ancak bu oldukça anlamsız. Benzer şekilde, hiçbir varlığa sahip olmayan bileşenleri arayan sistemlere sahip olabilirsiniz. Bu daha az anlamsız, çünkü sadece kilitleriyle eşleşen bir varlık yaratılmayı bekliyor olabilirler. Yani, evet, eğer yeni bir bileşen tanıtırsanız, o bileşeni kullanan bir sistem yapmak istersiniz. Aksi halde, mevcut olmayan bir kilit için sadece anahtarınıza diş eklersiniz.
Eğer varlığım sadece bir kimlik ise, robot varlığımın bazı sistemler tarafından taşınması, yaratılması ve değiştirilmesi gerektiğini nasıl bilebilirim?
Sanırım buna long
, varlığın içerdiği bileşenleri tanımlayan bir anahtar fikri ile cevap veriyorum . Bilirsin, çünkü anahtar kilide uyar.
Uf! Bu uzun bir yazıydı! (Ya da en azından benim büyük monitörümden öyle görünüyor.)