Яку бібліотеку графічного інтерфейсу C ++ ви можете запропонувати? [зачинено]


26

Я будую власний ігровий движок на C ++ і наразі вирішую, яким інтерфейсом користувача я повинен користуватися.

Чи варто користуватися бібліотекою? Чи варто робити своє?


3
Незрозуміло, що ви маєте на увазі: Гра в інтерфейс гри? Або графічний інтерфейс для інструментів? До кожного з них дуже різні вимоги ..
jacmoe

1
Кому потрібні інструменти, коли у вас є ДВИГАТЕЛЬ (епічна музика)
Ricket

1
якщо вам просто потрібні модальні діалоги, крихітні діалоги файлів у sourceforge - це єдиний міжплатформенний файл C C ++, який потрібно додати до вашого проекту. немає init, жодної основної петлі
tinyfiledialogs

Відповіді:


11

Насправді, віджети Qt можна інтегрувати з OpenGL, а OpenGL можна легко інтегрувати з Qt (QGLWidget). Звичайно, віджети платформенного вигляду можуть не бути саме тими, що ти шукаєш, але не хвилюйся, є способи їх налаштувати, створити власні або використати щось інше, що краще відповідає вашим потребам, наприклад, Qt Quick (який ви також маєте можливість інтегруватися).

Якщо вас цікавить, не пропустіть ці посилання: Віджети введіть третій вимір: WolfenQt та прискоріть свої віджети за допомогою OpenGL


9

Я не думаю, що вам слід писати власну, завдання створення ігрового двигуна настільки величезна сама по собі, якщо навколо вас багато безлічі бібліотек з хорошими ліцензіями, які ви могли б використовувати і змінювати на свій смак.

Для ігрового двигуна я б пішов на графічний інтерфейс негайного режиму. Більше інформації тут: http://www.mollyrocket.com/forums/viewtopic.php?t=134

Основна ідея полягає в тому, щоб скласти компонент і контролювати взаємодію одночасно:

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

Для одного, Unity використовує подібне поняття.

Ви можете знайти реалізацію NVIDIA, яку використовують у їхніх демонстраційних версіях: http://code.google.com/p/nvidia-widgets/


4
IM GUI - це цікава концепція, але я виявив, що виникають деякі проблеми, які виникають при спробах займатися геймерськими речами. Якщо ви хочете, щоб елементи меню анімували вхід / вихід, вам потрібно зробити щось на зразок змінити індивідуальне положення всіх віджетів, або зробити щось на зразок змінити матрицю перетворення GUI для цього виклику. Було б простіше, якби у вас був, наприклад, контейнер Window, дії якого перекладаються на його дітей і таке інше. Також чомусь у більшості реалізацій IMGUI відсутні "відключені" стану віджетів.
Тетрад

@Tetrad: Реалізувати групи віджетів дуже легко з автоматичними розкладками, відносними положеннями або абсолютними положеннями (віджети Nvidia це роблять.) Це дозволяє дуже легко містити віджети всередині вікон або панелей. Для стану "інвалідів" я не можу зрозуміти, чому це не було б тривіально реалізовано. Що стосується "ігрових речей", я думаю, що концепції прямого режиму насправді більше підходять, ніж збережений режим, оскільки віджети оновлюються у кожному кадрі.
Оскар Н.

7

Особисто я рекомендував би CEGUI . Це з відкритим кодом і досить добре. Однак потрібно пам’ятати, що це може бути дуже, дуже багатослівним, якщо випишете все вручну.

Але, з іншого боку, він має рендери як для OpenGL, так і для DirectX. Мені вдалося поставити його поверх шаблону, який я зазвичай використовую, який записує текстуру безпосередньо за допомогою VBO (це начебто хакі).

Розглянута гра була призначена для створення мережі. Завдання полягала в тому, щоб мати мережеву гру, з вестибюлем. Я знав, що у вестибюлі буде боліти шия, тому я вибрав бібліотеку, яка зробила для мене більшу частину.


Це те, що я зараз використовую. Я вважаю, що він має занадто велику залежність. І у мене виникли проблеми пов’язати це з моїм проектом (IIRC, ліцензія сказала, що я можу посилатися лише на бібліотеку)
MrValdez

6
У ньому є смішна кількість залежностей. Це роздуло мою крихітну демо-гру до 50 Мб!
knight666

Що? Я думаю, ти робиш це неправильно :) Вага DLL-файлів CEGUI в моїй грі менше 3 Мб. І до містера Вальдеса: CEGUI має ліцензію BSD ..
jacmoe

Ліцензія MIT - вибачте. CEGUI знаходиться під ліцензією MIT. :)
jacmoe

5

Проблема більшості бібліотек GUI (Qt, мабуть, найпопулярніша C ++, яка не є лише для Windows), полягає в тому, що більшість не буде добре інтегруватися в двигун. Традиційно в додатку GUI бібліотека GUI контролює основний цикл, і ви просто підключаєте зворотні дзвінки до подій. В ігровому двигуні ви, як правило, хочете керувати циклом, тому в кращому випадку це може бути складним. Можливо, ви шукаєте щось, що буде просто обробляти елементи керування малюнками та діалоги, і таке в 3D-контексті ви передаєте це? Це може бути набагато важче знайти: - /


<pedantic> wxWidgets також є кросплатформенним </pedantic>, хоча я зазначаю про інтеграцію двигуна
zebrabox

3
Я сказав: "найпопулярніший", а не "тільки" :-P wx має ще меншу підтримку для роботи з 3D-контекстами востаннє, що я подивився.
кодерангер

4

Я дуже вірю в написання свого, але потім я дуже старий. Боротьба з ще однією лінією графічного інтерфейсу, щоб зробити саме те, що ви хочете, як правило, зводить мене з гайки, додавши до того, що більшість графічних графічних інтерфейсів досить тривіальні, тому вам не доведеться розбиратись на MDI та супер дизайн OO, де кнопки можуть мати огляди прокрутки, які виділяються, коли вам трапляється навести на панель завдань збоку прапорця з перетягуючими пальцями - або щось подібне. Я думаю, різні штрихи для різних людей.


бувають ситуації, коли "писати своє" - це не стільки позамінне, як можна було б подумати. Гра, де важливий інтерфейс користувача, наприклад ігри управління або RPG зі складними елементами управління; користувальницький інтерфейс був би величезною частиною досвіду. joelonsoftware.com/articles/fog0000000007.html Якщо це основна функція бізнесу - виконайте це самостійно, незалежно від того
v.oddou

3

Один з варіантів, який, можливо, варто вивчити - це використання WebKit для візуалізації користувальницьких інтерфейсів та виконання всього вашого інтерфейсу за допомогою CSS / HTML / Javascript.

Ось реалізація з відкритим кодом (Berkelium) , і ось закрите комерційне впровадження (Awesomium)


5
WebKit та його спорідненість більш орієнтовані на частоту оновлення один чи два рази на секунду, можливо, складно зробити HUD для гри, орієнтованої на дії. Було б чудово для меню або повільніших бітів, хоча.
кодерангер

1
@coderanger: Ви можете писати цілі ігри в JavaScript / HTML5. Я опублікував комерційну гру для веб-магазину Chrome, яка працює на швидкості 60 FPS в WebKit / Chrome.
Шон Міддлічч

3

Я б запропонував IUP - портативний інтерфейс користувача: http://www.tecgraf.puc-rio.br/iup/

Я використовував його лише з мовою програмування Lua, але це було дуже просто у використанні. Він поставляється лише в ароматах C, LED та Lua, але ви можете легко зробити обгортку для цього.


Виглядає цікаво. Я перевірю це, як тільки зможу.
MrValdez

3

Я особисто використовую CEGUI у своєму ігровому проекті, і це досить надійне рішення. Проблема полягає в тому, що іноді майже не здається зробити одну крихітну зміну ваших змін файлів.

Я цим не користувався, але libRocket просто вийшов абсолютно безкоштовно, знімаючи всі ліцензійні внески і що ні. Класна частина цього файлу полягає в тому, що ви пишете його в html / css синтаксисі. http://librocket.com


2

Просто піднімемо цікаву пропозицію, якщо розробляєте гру для Windows, використовуйте API Win32. Просто використовуйте звичайні елементи керування Windows (я б рекомендував використовувати бібліотеки ATL / WTL), але зробіть їх власником намальованим.

Я бачив, як цю техніку використовували в першій грі Unreal Tournament, переглядаючи загальнодоступні заголовки (для виробників мод).

Однією з ключових переваг для цього є доступність всієї інфраструктури інтерфейсу Windows у вашому розпорядженні, а також збереження переваг користувача щодо швидкості повторення клавіатури, чутливості миші, швидкості подвійного клацання та інших речей. Крім того, якщо ви дотримуєтесь правил, інтерфейс буде швидким і мерехтливим.

Недоліками є те, що вам все одно доведеться написати якийсь код для підкласу елементів управління Windows, щоб зробити їх власником намальованим, щоб ви могли застосувати до них власну графіку та ефекти.

Просто викидаючи це як ідею.


1
Я вважаю, що win32 / COM імітується на Vista та Win 7. Не рекомендується для високої продуктивності ...
Stephen Furlani

Я думаю, це залежить від того, яку частину GUI ви будете використовувати в грі. Якщо це стосується лише системи меню, то хто по-справжньому дбає, якщо ви широко використовуєте її в найважливішому розділі частоти кадрів, тоді він потребує певної роботи та роздумів.
Daemin

@StephenFurlani Win32 / COM не імітується на Vista та Windows 7, він є рідною та повною швидкістю. Крім того, ATL / WTL не покладається на COM, але DirectX робить.
Daemin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.