Kendi oyun motorumu C ++ ile oluşturuyorum ve şu anda hangi kullanıcı arayüzünü kullanmam gerektiğine karar veriyorum.
Bir kütüphane mi kullanmalıyım? Kendim yapmalı mıyım?
Kendi oyun motorumu C ++ ile oluşturuyorum ve şu anda hangi kullanıcı arayüzünü kullanmam gerektiğine karar veriyorum.
Bir kütüphane mi kullanmalıyım? Kendim yapmalı mıyım?
Yanıtlar:
Aslında, Qt widget'ları OpenGL ile entegre edilebilir ve OpenGL Qt ile kolayca entegre edilebilir (QGLWidget). Tabii ki, platformun yerel görünümlü widget'ları tam olarak aradığınız şey olmayabilir, ama endişelenmeyin, bunları kişiselleştirmenin, kendi tarzınızı yaratmanın veya Qt Quick (hangisi gibi) gereksinimlerinize daha iyi cevap verebilecek başka bir şey kullanmanın yolları var sen de bütünleşebilmelisin).
Eğer ilgileniyorsanız, şu bağlantıları kaçırmayın: Widget'lar üçüncü boyuta girin: WolfenQt ve widget'larınızı OpenGL ile hızlandırın
Kendi yazman gerektiğini düşünmüyorum, bir oyun motoru yaratma görevi kendi başına çok büyük. Etrafında, kullanabileceğin iyi lisanslara sahip çok sayıda kütüphane varsa ve beğenini değiştirebilirsen.
Bir oyun motoru için bir anlık mod GUI için giderdim. Daha fazla bilgi burada: http://www.mollyrocket.com/forums/viewtopic.php?t=134
Temel fikir, bileşeni çizmek ve etkileşimi aynı anda kontrol etmektir:
if (button(id, position, size))
{
button_was_pressed();
}
Birincisi, Birlik benzer bir kavram kullanıyor.
Demolarında kullanılan NVIDIA'dan bir uygulama bulabilirsiniz: http://code.google.com/p/nvidia-widgets/
Şahsen ben CEGUI tavsiye ederim . Açık kaynak ve oldukça iyi. Ancak, akılda tutmanız gereken şey, her şeyi el ile yazmanız halinde çok, çok ayrıntılı olabileceğidir.
Ancak, artı tarafta, hem OpenGL hem de DirectX için oluşturucular var. Normalde kullandığım şablonun üstüne koymayı başardım, bu bir VBO kullanarak doğrudan bir dokuya yazıyor (bu bir tür sahtekarlık).
Söz konusu oyun bir ağ ödevi içindi. Görev, bir lobide ağ bağlantılı bir oyuna sahip olmaktı. Lobinin boynunda bir ağrı olacağını biliyordum, bu yüzden benim için çoğunu yapan bir kütüphane seçtim.
GUI kitaplıklarının çoğunda sorun (Qt muhtemelen sadece Windows olmayan en popüler C ++ olanıdır), birçoğunun bir motorla iyi bir şekilde bütünleşmeyeceğidir. Geleneksel olarak bir GUI uygulamasında, GUI kitaplığı ana döngüyü kontrol eder ve sadece geri aramaları olaylara bağlarsınız. Bir oyun motorunda genel olarak döngüyü kontrol etmek istersiniz, bu yüzden en iyi ihtimalle zor olabilir. Belki de sadece çizim kontrolleri ve diyaloglarla başa çıkacak bir şey mi arıyorsunuz ve böyle bir 3D bağlamı içinde? Bunları bulmak çok daha zor olabilir: - /
Kendi yazmanıza kesinlikle inanıyorum ama sonra yine çok yaşlıyım. Başka bir GUI lib ile mücadele etmek, sadece beni tahrik etme eğiliminde olmasını istediğin bir şeyi yapmak için, oyun GUI'lerinin çoğunun oldukça önemsiz olduğu gerçeğini ekledi. düğmelerde, sürüklenebilir baş parmakları olan bir onay kutusunun yanındaki bir görev çubuğunun üzerine geldiğinizde vurgulayan kaydırma görünümleri olabilir - veya buna benzer bir şey. Sanırım farklı insanlar için farklı vuruşlar.
Araştırmaya değecek bir seçenek, kullanıcı arayüzlerinizi oluşturmak için WebKit'i kullanmak ve tüm UI'nizi CSS / HTML / Javascript ile yapmak.
İşte açık kaynak kodlu bir uygulama (Berkelium) ve burada kapalı kaynak kodlu, ticari bir uygulama (Awesomium)
IUP - Taşınabilir Kullanıcı Arayüzü'nü öneririm: http://www.tecgraf.puc-rio.br/iup/
Sadece Lua programlama diliyle kullandım ama kullanımı çok kolaydı. Sadece C, LED ve Lua lezzetlerinde gelir, ancak bunun için kolayca bir sarmalayıcı yapabilirsiniz.
Oyun projemde şahsen CEGUI kullanıyorum ve bu oldukça sağlam bir çözüm. Sorun şu ki, neredeyse değişen küçük dosyalarınızı küçük bir değişiklik yapmak gibi hissediyor.
Ben kullanmadım, ama libRocket tüm lisans ücretlerini kaldırarak ve almadıkça tamamen ücretsiz kaldı. Bu lib hakkındaki en güzel yanı, onu html / css sözdiziminde yazmanızdır. http://librocket.com
Sadece ilginç bir öneride bulunmak, eğer Windows için oyun geliştiriyorsanız, Win32 API'sini kullanın. Sadece normal Windows kontrollerini kullanın (ATL / WTL kütüphanelerini kullanmanızı tavsiye ederim), fakat onları sahibini çizdirin.
Bu tekniğin ilk Unreal Tournament oyununda kullanıldığını, genel olarak yayınlanan başlıklara bakarken (mod yapımcıları için) gördüm.
Bunu yapmanın en önemli yararlarından biri, kullanıcının bütün Windows UI altyapısına sahip olmasının yanı sıra, kullanıcının klavye tekrarlama hızı, fare hassasiyeti, çift tıklama hızı ve diğer şeyler için tercihlerini sürdürmesidir. Ayrıca, kurallara uymanız durumunda arayüz hızlı ve titremesiz olacaktır.
Bunun dezavantajı, kendi grafiklerinizi ve bunlara etkilerini uygulayabilmeniz için Windows denetimlerini alt sınıfa eklemek için bazı kodlar yazmanız gerekmesidir.
Sadece bunu bir fikir olarak atıyorum.