Varlık Sisteminde UI / HUD nasıl kodlanır?


18

Sanırım Adam Martin'den (t-machine) esinlenen Varlık Sistemi fikrini aldım. Bunu bir sonraki projem için kullanmaya başlamak istiyorum.

Varlık, Bileşenler ve Sistemlerin temellerini zaten biliyorum. Benim sorunum UI / HUD ile nasıl başa çıkılacağı. Örneğin, bir görev penceresi, beceri penceresi, karakter bilgisi penceresi, vb. Bunlar her karede işlenmesi gerekmeyen şeyler. Şu anda, UI kodlamak için MVC kullanıyorum, ancak bunun Entity System ile uyumlu olacağını düşünmüyorum.

Varlık Sisteminin daha büyük bir OOP'ye yerleştirildiğini okudum. Kullanıcı arayüzünün ES dışında olup olmadığını bilmiyorum. Buna nasıl yaklaşırım?

Yanıtlar:


17

Belki varlık sistemlerinde çok fazla düşünürsünüz. Varlıklar oyundaki karakterleri, düşmanları, komut dosyalarını, madde işaretlerini, tetikleyicileri vb. Kapsamayı amaçlamaktadır.

Belki UI'nizi ayırırsanız, çok daha iyi ve daha kolay olacaktır. Varlıklar kapsamında HER ŞEY yapmak zorunda değilsiniz.


Adam Martin, t-machine'taki yayınlarından veya yorumlarından birinde de bunu söylüyor. ES belirli bir problem için bir çözümdür. Oyunun (motor) diğer yönleri için daha 'geleneksel' çözümlerle birlikte kullanılabilir ve kullanılmalıdır.
user8363

Teşekkür ederim. ES'de ne olması gerektiğinden emin değilim. Peki etkili bir kullanıcı arayüzünü nasıl kodlarsınız? Bence MVC bunu kesmiyor çünkü hiyerarşiyle ilgili sorunlar yaşıyorum.
Sylpheed

Kullanıcı arayüzü için farklı mimari kullanmayı kabul ettiğinizi görüyorum. O zaman MVC ile sorun nedir?
Narek

@Armen MVC'nin hiçbir problemi yok, ancak varlıkların kapsamına koyuyor. Sadece faydaları dezavantajlarını yenmeyecek. Mimari Astronot
Gustavo Maciel

3

Bir Varlık / Bileşen Kullanıcı Arayüzünün çalışabileceğini düşünüyorum, ancak bunu yapmak zor olurdu. Ayrıca, oyun varlıklarınızı işlemek için sahip olduğunuz bileşenlerden ve sistemlerden yeterince kaldırıldı, aslında oyununuzdaki başka bir varlık / bileşen sistemi olacaktır. İkisi arasında çok fazla çakışma olacağını hayal bile edemiyorum.

Varlık sistemleri harika ve her yerde kullanmak cazip olabilir. Sonuçta, gerçekten tatlı bir çekiç aldığınızda, tırnaklarınız gibi tüm sorunlarınızı tedavi etmek için cazipsiniz. Ancak, EC sistemi programlama çantanızdaki başka bir araçtır. Çözmek için kullanılan sorunlar için gerçekten iyi çalışıyor, ancak UI gibi sorunlar için daha iyi araçlara sahipsiniz.

Kalıtım yapısı GUI'ler için gerçekten iyi çalışır. Sadece UI bileşenlerini oluşturmak için değil, aynı zamanda bunları düzenlemek için de. Kullanıcı arabirimi bileşenlerinin konum, ölçek ve opaklık gibi özellikleri devralabilmeleri için diğer bileşenlerin çocukları olması gerçekten güzel. Bunu bir EC sistemi ile kurmaya çalışacak olsaydınız, EC sisteminin bazı kurallarını çiğnemeniz gerekirdi.


1

UI / HUD her çizildiğinde çağrılan yeni bir arabirim işlevi yapabilir ve özel / komut dosyası oluşturulmuş bileşenlerin bu işlevi uygulamasına izin verebilirsiniz. Bunun için bir IMGUI sistemi (Google'da çok sayıda öğretici vardır, bu sadece orijinal sunumdur) kullanılmasını gerektirir. Bununla pencereleri, kendi UI oluşturma bileşeninize ve bir pencere çerçevesi oluşturucu bileşenine sahip olacağınız varlıklar olarak yapabilirsiniz.

Tüm bunları her karede işlememeye gelince, tüm kullanıcı arayüzünü yalnızca her türlü giriş / veri olayında güncelleyeceğiniz farklı bir arabellek oluşturabilirsiniz. Yani, bir olay alındığında, pencerenin bir sonraki kareyi yeniden boyaması gerektiğini belirtmek için bazı değişkenleri değiştirir. Bu değişken true olursa, false olarak ayarlanır ve bundan sonra UI arabirimleri çağrılır. Animasyonlar istiyorsanız, kullanıcı arayüzünün kendisinin bir sonraki kare için bir boyamayı tetikleyebilmesi için bu işlem sırasını kullanmanız önemlidir.

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.