Apa perpustakaan C ++ GUI yang bisa Anda sarankan? [Tutup]

26

Saya sedang membangun mesin gim saya sendiri di C ++ dan saat ini saya memutuskan antarmuka pengguna apa yang harus saya gunakan.

Haruskah saya menggunakan perpustakaan? Haruskah saya membuatnya sendiri?

MrValdez
sumber
3
Tidak jelas apa yang Anda maksud: GUI dalam game? Atau GUI untuk alat? Masing-masing adalah persyaratan yang sangat berbeda ..
jacmoe
1
Siapa yang butuh alat ketika Anda memiliki ENGINE (musik epik)
Ricket
1
jika Anda hanya membutuhkan dialog modal, dialog file kecil di sourceforge adalah file lintas platform C C ++ tunggal untuk ditambahkan ke proyek Anda. tidak init, tidak ada loop utama
tinyfiledialogs

Jawaban:

11

Faktanya, widget Qt dapat diintegrasikan dengan OpenGL dan OpenGL dapat dengan mudah diintegrasikan dengan Qt (QGLWidget). Tentu saja, platform mencari widget asli mungkin tidak persis apa yang Anda cari, tetapi jangan khawatir, ada cara untuk menyesuaikannya, membuat sendiri atau menggunakan sesuatu yang lain yang lebih sesuai dengan kebutuhan Anda, seperti Qt Quick (yang Anda harus dapat mengintegrasikan juga).

Jika Anda tertarik, jangan lewatkan tautan ini: Widget masuk ke dimensi ketiga: WolfenQt dan Percepat widget Anda dengan OpenGL

Palmik
sumber
9

Saya tidak berpikir Anda harus menulis sendiri, tugas menciptakan mesin permainan sangat besar dengan sendirinya, jika Anda ada banyak perpustakaan dengan lisensi yang baik yang dapat Anda gunakan, dan modifikasi sesuai dengan keinginan Anda.

Untuk mesin gim saya akan pergi untuk GUI mode Segera. Informasi lebih lanjut di sini: http://www.mollyrocket.com/forums/viewtopic.php?t=134

Gagasan utamanya adalah menggambar komponen dan mengontrol interaksi pada saat yang sama:

if (button(id, position, size)) 
{
    button_was_pressed();
}

Untuk satu, Unity menggunakan konsep serupa.

Anda dapat menemukan implementasi oleh NVIDIA, yang digunakan dalam demo mereka: http://code.google.com/p/nvidia-widgets/

NocturnDragon
sumber
4
IM GUI adalah konsep yang menarik, tetapi saya telah menemukan bahwa ada beberapa masalah yang muncul ketika Anda mencoba melakukan hal-hal yang gamey. Jika Anda ingin menghidupkan dan mematikan elemen menu, Anda harus melakukan sesuatu seperti memodifikasi posisi masing-masing widget, atau melakukan sesuatu seperti memodifikasi matriks transformasi GUI untuk panggilan itu. Akan lebih mudah jika Anda memiliki, misalnya, wadah Window yang tindakannya diterjemahkan ke anak-anak dan semacamnya. Juga, karena alasan tertentu, sebagian besar implementasi IMGUI tidak memiliki status widget "dinonaktifkan".
Tetrad
@Tetrad: Sangat mudah untuk mengimplementasikan grup widget dengan tata letak otomatis, posisi relatif atau posisi absolut (widget Nvidia melakukan ini.) Ini memungkinkan Anda dengan mudah memuat widget di dalam jendela atau panel. Untuk keadaan "dinonaktifkan", saya tidak bisa melihat mengapa ini tidak akan diimplementasikan secara sepele. Untuk "hal permainan", saya pikir konsep mode langsung sebenarnya lebih cocok daripada mode dipertahankan, karena widget diperbarui setiap frame.
Oskar N.
7

Secara pribadi, saya akan merekomendasikan CEGUI . Ini open source dan cukup bagus. Namun, yang harus Anda ingat adalah bahwa itu bisa sangat, sangat bertele-tele jika Anda menulis semuanya dengan tangan.

Tetapi, di sisi positifnya, memiliki penyaji untuk OpenGL dan DirectX. Saya berhasil meletakkannya di atas template yang biasanya saya gunakan, yang menulis ke tekstur langsung menggunakan VBO (itu jenis hacky).

Game yang dimaksud adalah untuk tugas jaringan. Tugasnya adalah memiliki permainan jaringan, dengan lobi. Saya tahu lobi akan membuat sakit di leher, jadi saya memilih perpustakaan yang melakukan sebagian besar untuk saya.

knight666
sumber
Inilah yang saya gunakan saat ini. Saya menemukan bahwa itu memiliki terlalu banyak ketergantungan. Dan saya kesulitan menghubungkannya dengan proyek saya (IIRC, lisensi mengatakan bahwa saya hanya dapat menautkan ke perpustakaan)
MrValdez
6
Ini memiliki jumlah dependensi yang konyol . Ini membengkak game demo kecil saya hingga 50 MB!
knight666
Apa? Saya pikir Anda salah melakukannya :) Berat DLL CEGUI di game saya kurang dari 3 MB. Dan untuk MrValdez: CEGUI berada di bawah lisensi BSD ..
jacmoe
Lisensi MIT - maaf. CEGUI berada di bawah lisensi MIT. :)
jacmoe
5

Masalah dengan sebagian besar pustaka GUI (Qt mungkin yang paling populer C ++ yang bukan hanya Windows) adalah bahwa sebagian besar tidak akan terintegrasi dengan baik ke dalam mesin. Secara tradisional di aplikasi GUI, perpustakaan GUI mengontrol loop utama dan Anda hanya menghubungkan panggilan balik ke acara. Dalam mesin gim, Anda biasanya ingin mengendalikan perulangan, sehingga bisa jadi paling sulit. Mungkin Anda mencari sesuatu yang hanya akan menangani kontrol menggambar dan dialog dan semacamnya ke dalam konteks 3D yang Anda berikan? Itu bisa menjadi jauh lebih sulit untuk ditemukan: - /

pembuat kode
sumber
<pedantic> wxWidgets juga cross-platform </pedantic> meskipun saya
setuju dengan
3
Saya mengatakan "paling populer", bukan "hanya": -P wx memiliki dukungan lebih sedikit untuk bekerja dengan konteks 3D terakhir yang saya lihat.
coderanger
4

Saya sangat percaya pada menulis sendiri tetapi sekali lagi saya sangat oldskool. Berkelahi dengan lib GUI lain untuk melakukan hal yang Anda inginkan cenderung membuat saya gila, ditambah dengan fakta bahwa sebagian besar GUI gim cukup sepele sehingga Anda tidak perlu pergi keluar pada MDI dan desain OO super di mana tombol dapat memiliki tampilan gulir yang menyorot ketika Anda melayang-layang di atas bilah tugas di sisi kotak centang dengan ibu jari yang dapat diseret - atau sesuatu seperti itu. Stroke berbeda untuk orang yang berbeda kurasa.

Kaj
sumber
ada situasi di mana "menulis sendiri" tidak begitu banyak tempat seperti yang mungkin dipikirkan orang. Gim di mana UI penting, seperti gim manajemen, atau RPG dengan manajemen item yang rumit; UI akan menjadi bagian besar dari pengalaman. joelonsoftware.com/articles/fog0000000007.html Jika ini adalah fungsi bisnis inti - lakukan sendiri, apa pun yang terjadi
v.oddou
3

Salah satu opsi yang mungkin layak diselidiki adalah menggunakan WebKit untuk membuat antarmuka pengguna Anda dan melakukan semua UI Anda dengan CSS / HTML / Javascript.

Berikut ini adalah implementasi sumber terbuka (Berkelium) , dan inilah sumber tertutup, penerapan komersial (Awesomium)

Tetrad
sumber
5
WebKit dan kerabatnya lebih diarahkan pada kecepatan penyegaran sekali atau dua kali per detik, mungkin sulit untuk melakukan HUD untuk game berorientasi aksi seperti itu. Akan bagus untuk menu atau bit yang lebih lambat.
coderanger
1
@coderanger: Anda dapat menulis seluruh game dalam JavaScript / HTML5. Saya telah menerbitkan game aksi komersial untuk Toko Web Chrome yang berjalan pada 60 FPS saja di WebKit / Chrome.
Sean Middleditch
3

Saya akan menyarankan IUP - Portable User Interface: http://www.tecgraf.puc-rio.br/iup/

Saya hanya menggunakannya dengan bahasa pemrograman Lua tetapi sangat mudah digunakan. Itu hanya datang dalam rasa C, LED dan Lua tetapi Anda dapat dengan mudah membuat pembungkus untuk itu.

Dalin Seivewright
sumber
Terlihat menarik. Aku akan memeriksanya secepat mungkin.
MrValdez
3

Saya pribadi menggunakan CEGUI dalam proyek game saya, dan ini adalah solusi yang cukup kuat. Masalahnya adalah, kadang-kadang hampir terasa seperti membuat satu perubahan kecil pada mengubah banyak file Anda.

Saya belum menggunakannya, tetapi libRocket baru saja benar-benar gratis, menghapus semua biaya lisensi dan apa yang tidak. Bagian keren dari lib ini adalah Anda menulisnya dalam sintaks html / css. http://librocket.com

Aidan Knight
sumber
2

Hanya mengajukan saran yang menarik, jika mengembangkan game untuk Windows, gunakan Win32 API. Cukup gunakan kontrol windows normal (saya akan merekomendasikan menggunakan perpustakaan ATL / WTL) tetapi membuat mereka pemiliknya ditarik.

Saya melihat teknik ini digunakan dalam game Unreal Tournament pertama, sambil melihat melalui header yang dirilis secara publik (untuk pembuat mod).

Salah satu manfaat utama untuk melakukan ini adalah memiliki seluruh infrastruktur Windows UI yang Anda inginkan, serta mempertahankan preferensi pengguna untuk tingkat pengulangan keyboard, sensitivitas mouse, kecepatan klik ganda, dan hal-hal lainnya. Juga jika Anda mematuhi aturan, antarmuka akan cepat dan bebas berkedip.

Kekurangannya adalah Anda masih harus menulis beberapa kode untuk mensubktrasikan kontrol windows untuk membuatnya menarik, sehingga Anda dapat menerapkan grafik dan efeknya sendiri.

Hanya membuang ini sebagai ide.

Daemin
sumber
1
Saya percaya win32 / COM ditiru pada Vista dan Win 7. Tidak direkomendasikan untuk kinerja tinggi ...
Stephen Furlani
Saya kira itu tergantung berapa banyak GUI yang akan Anda gunakan dalam game. Jika itu hanya untuk sistem menu maka siapa yang benar-benar peduli, jika Anda menggunakannya secara luas di bagian penting frame rate maka perlu beberapa pekerjaan dan pemikiran.
Daemin
@StephenFurlani Win32 / COM tidak ditiru pada Vista dan Windows 7, ini asli dan kecepatan penuh. Lebih jauh, ATL / WTL tidak mengandalkan COM, tetapi DirectX tidak.
Daemin