Hangi C ++ GUI kütüphanesini önerebilirsiniz? [kapalı]


26

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?


3
Ne demek istediğinizi açık değil: Oyun içi GUI? Veya araçlar için GUI? Her biri çok farklı bir gerekliliktir ..
jacmoe

1
Bir MOTOR (epik müzik)
Ricket

1
modsal iletişim kutularına ihtiyacınız varsa, sourceforge'daki küçük dosya iletişim kutuları projenize eklemek için tek bir C C ++ çapraz platform dosyasıdır. hayır init, hiçbir ana döngü
tinyfiledialogs

Yanıtlar:


11

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


9

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/


4
IM GUI ilginç bir kavram, ancak ben gamey şeyler yapmaya çalıştığınızda ortaya çıkan bazı sorunlar olduğunu gördüm. Menü öğelerinin içeri / dışarı hareket etmesini istiyorsanız, tüm widget'ların kişisel pozisyonlarını değiştirmek gibi bir şey yapmanız veya bu çağrı için GUI dönüşüm matrisini değiştirmek gibi bir şey yapmanız gerekir. Örneğin, eylemleri çocuklarına çevrilmiş bir Pencere konteyneri olsaydı daha kolay olurdu. Ayrıca, bazı nedenlerden dolayı, çoğu IMGUI uygulaması "devre dışı" widget durumlarından yoksundur.
Tetrad,

@Tetrad: Otomatik mizanpaj gruplarını, otomatik mizanpajlara, göreceli konumlara veya mutlak konumlara sahip olarak uygulamak çok kolaydır (Nvidia widget'ları bunu yapar.) Pencere veya panellerin içinde widget'leri kolayca içerebilmenizi sağlar. “Engelliler” hali için, bunun neden önemsiz şekilde uygulanmayacağını göremiyorum. "Gamey işleri" için, widget'ler her karede güncellendiğinden, acil mod kavramlarının tutulan moddan daha uygun olduğunu düşünüyorum.
Oskar N.

7

Ş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.


Şu an kullandığım şey bu. Buna rağmen çok fazla bağımlılık olduğunu buldum. Ve bunu projeme bağlamakta sorun yaşadım (IIRC, lisans sadece kütüphaneye bağlanabileceğimi söyledi)
MrValdez

6
Bu bir var saçma bağımlılıkları miktarı. Minik demo oyunumu 50 MB'ye şişirdi!
knight666

Ne? Yanlış yaptığınızı düşünüyorum :) Oyunumdaki CEGUI DLL dosyalarının ağırlığı 3 MB'tan az. Ve MrValdez'e: CEGUI BSD lisansı altında ..
jacmoe

MIT lisansı - özür dilerim. CEGUI MIT lisansı altındadır. :)
jacmoe

5

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: - /


<pedantic> wxWidgets ayrıca platformlar
arasıdır

3
"En popüler" dedim, "sadece" değil: - P wx, en son baktığımda 3B içeriklerle çalışma konusunda daha az desteğe sahip.
kodlayıcı

4

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.


"kendi yazını yazmanın", tahmin edebileceği kadar fazla olmadığı durumlar vardır. Yönetim oyunları veya karmaşık eşya yönetimleri içeren RPG'ler gibi kullanıcı arayüzünün önemli olduğu bir oyun; UI, deneyimin büyük bir parçası olacaktır. joelonsoftware.com/articles/fog0000000007.html Temel bir iş işlevi ise - ne olursa olsun, kendin yap
v.oddou

3

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)


5
WebKit ve kin, saniyede bir veya iki kez yenileme hızına daha fazla yöneliktir, aksiyon odaklı bir oyun için bu şekilde HUD yapmak zor olabilir. Menüler için harika olurdu veya olsa yavaş bit.
coderanger

1
@coderanger: Tüm oyunları JavaScript / HTML5 ile yazabilirsiniz. WebKit / Chrome'da 60 FPS'de çalışan Chrome Web Mağazası için ticari bir aksiyon oyunu yayımladım.
Sean Middleditch

3

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.


İlgi çekici görünüyor. En kısa sürede kontrol edeceğim.
MrValdez

3

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


2

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.


1
Win32 / COM’un Vista ve Win 7’de öykündüğüne inanıyorum. Yüksek performans için önerilmez ...
Stephen Furlani 20

Sanırım oyunda kullanacağınız GUI'nın ne kadar olduğuna bağlı. Eğer sadece menü sistemi içinse o zaman gerçekten kimin umrunda, kare hızı çok önemli bölümünde kullanıyorsanız o zaman biraz çalışma ve düşünce gerekir.
Daemin

@StephenFurlani Win32 / COM Vista ve Windows 7'de öykünmedi, yerel ve tam hızlı. Ayrıca ATL / WTL, COM'a güvenmiyor, ancak DirectX de kullanıyor.
Daemin
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.