Buduję własny silnik gry w C ++ i obecnie decyduję o tym, jakiego interfejsu użytkownika powinienem użyć.
Czy powinienem korzystać z biblioteki? Czy powinienem zrobić własny?
Buduję własny silnik gry w C ++ i obecnie decyduję o tym, jakiego interfejsu użytkownika powinienem użyć.
Czy powinienem korzystać z biblioteki? Czy powinienem zrobić własny?
Odpowiedzi:
W rzeczywistości widżety Qt można zintegrować z OpenGL, a OpenGL można łatwo zintegrować z Qt (QGLWidget). Oczywiście natywnie wyglądające widżety platformy mogą nie być dokładnie tym, czego szukasz, ale nie martw się, istnieją sposoby na ich dostosowanie, stworzenie własnego lub użycie czegoś innego, który lepiej spełni twoje potrzeby, takiego jak Qt Quick (który powinieneś być również w stanie zintegrować się).
Jeśli jesteś zainteresowany, nie przegap tych linków: Widżety wchodzą w trzeci wymiar: WolfenQt i Przyspiesz swoje widżety za pomocą OpenGL
Nie sądzę, że powinieneś pisać własne, zadanie tworzenia silnika gry jest samo w sobie tak ogromne, jeśli w pobliżu jest wiele bibliotek z dobrymi licencjami, których możesz użyć i zmodyfikować według własnych upodobań.
W przypadku silnika gry wybrałbym GUI w trybie natychmiastowym. Więcej informacji tutaj: http://www.mollyrocket.com/forums/viewtopic.php?t=134
Kluczową ideą jest narysowanie komponentu i jednoczesne kontrolowanie interakcji:
if (button(id, position, size))
{
button_was_pressed();
}
Po pierwsze, Unity stosuje podobną koncepcję.
Możesz znaleźć implementację firmy NVIDIA, wykorzystaną w jej pokazach: http://code.google.com/p/nvidia-widgets/
Osobiście polecam CEGUI . Jest open source i całkiem nieźle. Trzeba jednak pamiętać, że jeśli wszystko wypiszesz ręcznie, może być bardzo, bardzo gadatliwe.
Ale na plus ma renderery zarówno dla OpenGL, jak i DirectX. Udało mi się umieścić go na szablonie, którego zwykle używam, który zapisuje teksturę bezpośrednio przy użyciu VBO (to trochę hacky).
Ta gra była przeznaczona do pracy w sieci. Zadanie polegało na stworzeniu sieciowej gry z lobby. Wiedziałem, że lobby będzie kłopotem z szyją, więc wybrałem bibliotekę, która zrobiła dla mnie większość.
Problem z większością bibliotek GUI (Qt jest prawdopodobnie najpopularniejszą wersją C ++, która nie jest przeznaczona tylko dla systemu Windows) polega na tym, że większość nie integruje się dobrze z silnikiem. Tradycyjnie w aplikacji GUI biblioteka GUI kontroluje główną pętlę, a Ty po prostu podłączasz wywołania zwrotne do zdarzeń. W silniku gry zazwyczaj chcesz kontrolować pętlę, więc może to być co najwyżej trudne. Może szukasz czegoś, co po prostu poradzi sobie z kontrolkami do rysowania i oknami dialogowymi, i tak w kontekście 3D, który przekażesz? Mogą być znacznie trudniejsze do znalezienia: - /
Mocno wierzę w pisanie własnych, ale znowu jestem bardzo oldskool. Walka z kolejną biblioteką GUI, aby zrobić tylko to, co chcesz, doprowadza mnie do szału, dodając do tego fakt, że większość graficznych interfejsów gry jest dość trywialna, więc nie musisz iść na całość w projektowaniu MDI i super OO, gdzie Przyciski mogą mieć widoki przewijania, które wyróżniają się, gdy najedziesz myszką na pasek zadań z boku pola wyboru za pomocą przeciąganych kciuków - lub coś w tym rodzaju. Chyba różne pociągnięcia dla różnych ludzi.
Jedną z opcji, którą warto zbadać, jest użycie WebKit do renderowania interfejsów użytkownika i zrobienie całego interfejsu użytkownika za pomocą CSS / HTML / Javascript.
Oto implementacja open source (Berkelium) , a tutaj jest komercyjna implementacja zamkniętego źródła (Awesomium)
Proponuję IUP - przenośny interfejs użytkownika: http://www.tecgraf.puc-rio.br/iup/
Użyłem go tylko z językiem programowania Lua, ale był bardzo łatwy w użyciu. Występuje tylko w wersjach C, LED i Lua, ale możesz łatwo zrobić dla niego opakowanie.
Osobiście używam CEGUI w moim projekcie gry i jest to dość solidne rozwiązanie. Problem w tym, że czasami wydaje się, że wystarczy jedna drobna zmiana twoich zmieniających się ton plików.
Nie korzystałem z niego, ale libRocket po prostu stał się całkowicie darmowy, usuwając wszystkie opłaty licencyjne i co nie. Fajną częścią tej biblioteki jest to, że piszesz ją w składni HTML / CSS. http://librocket.com
Po prostu podnosząc ciekawą sugestię, jeśli tworzysz grę dla systemu Windows, użyj Win32 API. Wystarczy użyć zwykłych kontrolek systemu Windows (zaleciłbym użycie bibliotek ATL / WTL), ale narysuj ich właściciela.
Widziałem tę technikę w pierwszej grze Unreal Tournament, przeglądając publicznie wydane nagłówki (dla twórców modów).
Jedną z kluczowych korzyści z tego jest dysponowanie całą infrastrukturą interfejsu użytkownika systemu Windows, a także utrzymanie preferencji użytkownika dotyczących częstotliwości powtarzania klawiatury, czułości myszy, szybkości podwójnego kliknięcia i innych rzeczy. Ponadto, jeśli będziesz przestrzegać zasad, interfejs będzie szybki i wolny od migotania.
Wadą jest to, że nadal będziesz musiał napisać kod, aby podklasować kontrolki systemu Windows, aby ich właściciel rysował, abyś mógł zastosować do nich własną grafikę i efekty.
Wyrzucam to jako pomysł.