Я будую власний ігровий движок на C ++ і наразі вирішую, яким інтерфейсом користувача я повинен користуватися.
Чи варто користуватися бібліотекою? Чи варто робити своє?
Я будую власний ігровий движок на C ++ і наразі вирішую, яким інтерфейсом користувача я повинен користуватися.
Чи варто користуватися бібліотекою? Чи варто робити своє?
Відповіді:
Насправді, віджети Qt можна інтегрувати з OpenGL, а OpenGL можна легко інтегрувати з Qt (QGLWidget). Звичайно, віджети платформенного вигляду можуть не бути саме тими, що ти шукаєш, але не хвилюйся, є способи їх налаштувати, створити власні або використати щось інше, що краще відповідає вашим потребам, наприклад, Qt Quick (який ви також маєте можливість інтегруватися).
Якщо вас цікавить, не пропустіть ці посилання: Віджети введіть третій вимір: WolfenQt та прискоріть свої віджети за допомогою OpenGL
Я не думаю, що вам слід писати власну, завдання створення ігрового двигуна настільки величезна сама по собі, якщо навколо вас багато безлічі бібліотек з хорошими ліцензіями, які ви могли б використовувати і змінювати на свій смак.
Для ігрового двигуна я б пішов на графічний інтерфейс негайного режиму. Більше інформації тут: 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/
Особисто я рекомендував би CEGUI . Це з відкритим кодом і досить добре. Однак потрібно пам’ятати, що це може бути дуже, дуже багатослівним, якщо випишете все вручну.
Але, з іншого боку, він має рендери як для OpenGL, так і для DirectX. Мені вдалося поставити його поверх шаблону, який я зазвичай використовую, який записує текстуру безпосередньо за допомогою VBO (це начебто хакі).
Розглянута гра була призначена для створення мережі. Завдання полягала в тому, щоб мати мережеву гру, з вестибюлем. Я знав, що у вестибюлі буде боліти шия, тому я вибрав бібліотеку, яка зробила для мене більшу частину.
Проблема більшості бібліотек GUI (Qt, мабуть, найпопулярніша C ++, яка не є лише для Windows), полягає в тому, що більшість не буде добре інтегруватися в двигун. Традиційно в додатку GUI бібліотека GUI контролює основний цикл, і ви просто підключаєте зворотні дзвінки до подій. В ігровому двигуні ви, як правило, хочете керувати циклом, тому в кращому випадку це може бути складним. Можливо, ви шукаєте щось, що буде просто обробляти елементи керування малюнками та діалоги, і таке в 3D-контексті ви передаєте це? Це може бути набагато важче знайти: - /
Я дуже вірю в написання свого, але потім я дуже старий. Боротьба з ще однією лінією графічного інтерфейсу, щоб зробити саме те, що ви хочете, як правило, зводить мене з гайки, додавши до того, що більшість графічних графічних інтерфейсів досить тривіальні, тому вам не доведеться розбиратись на MDI та супер дизайн OO, де кнопки можуть мати огляди прокрутки, які виділяються, коли вам трапляється навести на панель завдань збоку прапорця з перетягуючими пальцями - або щось подібне. Я думаю, різні штрихи для різних людей.
Один з варіантів, який, можливо, варто вивчити - це використання WebKit для візуалізації користувальницьких інтерфейсів та виконання всього вашого інтерфейсу за допомогою CSS / HTML / Javascript.
Ось реалізація з відкритим кодом (Berkelium) , і ось закрите комерційне впровадження (Awesomium)
Я б запропонував IUP - портативний інтерфейс користувача: http://www.tecgraf.puc-rio.br/iup/
Я використовував його лише з мовою програмування Lua, але це було дуже просто у використанні. Він поставляється лише в ароматах C, LED та Lua, але ви можете легко зробити обгортку для цього.
Я особисто використовую CEGUI у своєму ігровому проекті, і це досить надійне рішення. Проблема полягає в тому, що іноді майже не здається зробити одну крихітну зміну ваших змін файлів.
Я цим не користувався, але libRocket просто вийшов абсолютно безкоштовно, знімаючи всі ліцензійні внески і що ні. Класна частина цього файлу полягає в тому, що ви пишете його в html / css синтаксисі. http://librocket.com
Просто піднімемо цікаву пропозицію, якщо розробляєте гру для Windows, використовуйте API Win32. Просто використовуйте звичайні елементи керування Windows (я б рекомендував використовувати бібліотеки ATL / WTL), але зробіть їх власником намальованим.
Я бачив, як цю техніку використовували в першій грі Unreal Tournament, переглядаючи загальнодоступні заголовки (для виробників мод).
Однією з ключових переваг для цього є доступність всієї інфраструктури інтерфейсу Windows у вашому розпорядженні, а також збереження переваг користувача щодо швидкості повторення клавіатури, чутливості миші, швидкості подвійного клацання та інших речей. Крім того, якщо ви дотримуєтесь правил, інтерфейс буде швидким і мерехтливим.
Недоліками є те, що вам все одно доведеться написати якийсь код для підкласу елементів управління Windows, щоб зробити їх власником намальованим, щоб ви могли застосувати до них власну графіку та ефекти.
Просто викидаючи це як ідею.