Mam książkę do programowania w C ++ i mam w niej sekcję Lua. Zacząłem czytać sekcję Lua i brzmi to interesująco, ale nie mogę określić zalet i wad używania Lua w mojej grze C ++. Jedyną korzyścią, o której obecnie myślę, jest to, że możesz dokonywać aktualizacji kodowania za pośrednictwem Lua bez konieczności ponownej kompilacji. Poza tym nie mogę nic wymyślić. Jakie są zalety i wady dodawania Lua do gry w C ++?
Przykłady będą mile widziane.
Odpowiedzi:
Nie lekceważ użyteczności tego tak łatwo. Nigdy nie zrozumiesz, jak będziesz produktywny, dopóki nie usuniesz kroku ponownej kompilacji.
„Płynąć” jest dość dobrze rozumieć pojęcie psychologiczne, jeśli chodzi o pracę. Płynie z tego uczucie, gdy koncentrujesz się na aktywności, kiedy analizujesz i rozwiązujesz problemy prawie bez zastanowienia itp. Jesteś najbardziej wydajny, kiedy „płyniesz”.
Czasy kompilacji wszystko psują. Trudno jest pozostać w ruchu, jeśli masz 10-sekundową kompilację między testowaniem czegoś.
Kiedy rozwijasz rozgrywkę, zwykle masz „ciasną pętlę”. Masz pomysł, kodujesz test, aby sprawdzić, czy działa, a następnie wypróbowujesz. Jeśli to nie działa, zmodyfikuj go i spróbuj ponownie. Czas „testowania kodu” jest bardzo ważny dla utrzymania przepływu. Kluczowe znaczenie ma zmniejszenie jej do minimum.
Lua (lub dowolny wbudowany język skryptowy) pozwala ci testować zmiany, nie tylko bez „kompilacji”, ale także w grze . W zależności od tego, jak zbudujesz grę, możesz uruchomić polecenie, które uruchomi ponownie grę z nowymi skryptami, bez konieczności zatrzymywania i ponownego ładowania danych itd. Nie tylko nie musisz ponownie kompilować, nie musisz ponownie uruchamiać.
Zdolność do tego, przy odpowiednim wsparciu silnika, może znacznie zwiększyć wydajność.
Kolejną ważną zaletą skryptów jest możliwość po prostu nie dbania. Jeśli spędziłeś dużo czasu na pisaniu C ++, byłbyś zaskoczony, ile czasu spędzasz w ciągu kilku minut. Gdzie pamięć jest usuwana. Gdzie to się uwalnia. Nawet jeśli używasz
shared_ptr
wszędzie, wystarczy samo wpisanie wszystkich tych nazw zmiennych spowalnia cię.W dynamicznie pisanym języku skryptowym nie musisz się tym przejmować. Określanie zakresu jest proste. Funkcje są pierwszorzędnymi obiektami; nie musisz ręcznie budować funktorów. Tak łatwo jest robić pewne rzeczy.
To ma negatywne strony, jeśli nie jesteś zdyscyplinowanym programistą. W Lua bardzo łatwo jest używać globałów (choć istnieją sposoby, aby temu zapobiec). Brak opieki oznacza, że możesz być bardzo niechlujny podczas pisania kodu.
Ale z drugiej strony bycie bardzo niechlujnym może mieć zalety .
Kolejną zaletą Lua jest to, że tworzy ładny język opisu danych. Podobnie jak JSON to tylko plik JavaScript, który buduje i zwraca tablicę / tabelę, możesz tworzyć skrypty Lua zwracające tabele.
Jest to przydatne w przypadku plików konfiguracyjnych; Format tabeli Lui jest znacznie lepszy niż format .ini. Format jest nadal dość czysty, kompaktowy i rozszerzalny.
Aha, i wciąż jest to skrypt Lua, więc może wykonywać logikę. Minusem tego jest ... cóż, jest to skrypt Lua, więc może on wykonywać rzeczywistą logikę . To może być katastrofalne w grze, ponieważ użytkownik może potencjalnie zacząć coś popsuć.
Ale tak naprawdę łatwo sobie z tym poradzić. Lua została zaprojektowana do osadzania, co oznacza, że izolacja jest w rzeczywistości dość łatwa. Rzeczywiście, nowy stan Lua domyślnie nie zapewnia niczego ; musisz zrobić coś, aby odsłonić nawet najbardziej podstawowe ze standardowych bibliotek Lua. Dostęp do plików, dostęp do stanu gry itp. Jest wyłącznie opt-in, a nie opt-out. I każdy stan Lua jest odrębny od siebie. Stan Lua używany przez skrypty AI nie musi być stanem Lua używany przez pliki konfiguracyjne.
Mam trochę kodu, który pozwala ci zarejestrować wiele standardowych bibliotek Lua, ale przechodzi i usuwa wszystkie pliki IO. Ostatecznie najgorsze, co może zrobić plik konfiguracyjny oparty na skryptach Lua, powoduje awarię gry natychmiast po uruchomieniu, powodując brak pamięci. A ponieważ nie udostępniasz ręcznie tych plików konfiguracyjnych, haker nie byłby zbyt zabawny.
Powiedziałbym, że największym minusem każdego języka skryptowego jest debugowanie. Większość języków skryptowych nie ma debuggerów, a Lua nie jest inaczej. Lua ma wszystkie narzędzia potrzebne do zbudowania narzędzi do debugowania. Ale tak naprawdę nie ma wbudowanego debugera. Musisz go połączyć. A to będzie wymagało rozsądnego poziomu pracy.
Lub możesz zrobić to z „debugowaniem printf”. To zależy od tego, ile kodu Lua piszesz.
źródło
Gdzie pracuję:
Plusy:
luac -l
i zerknąć na kod bajtowy, aby przeprowadzić analizę; bardzo łatwo jest również parsować większość plików źródłowych lua, szczególnie jeśli masz konwencję kodowania. Możemy egzekwować lokalną konwencję. Możesz także zajrzeć do metalua, aby uzyskać jeszcze więcej mocy.lua_pcall
.Cons:
step
powinno być, zmienia się drastycznie w każdej grze. Niektóre działają lepiej z pełnym GC na każdej ramce (mały zestaw roboczy). Niektóre pracują lepiej przy znacznie mniejszych przepustkach rzadziej. Pamiętaj, że jest wiele pracy nad ulepszeniem GC w nowszych wersjach Lua i niektórych łatkach (których nie powinieneś się obawiać!)lua_State
W niektórych przypadkach rozładowujemy skrypty lub całkowicie je wyrzucamy . Nadal czasami mamy problemy. Strojenie wielkości pul małych obiektów (są one ustalone dla uproszczenia i obniżenia kosztów ogólnych) oraz wielkości stosu dużych obiektów specyficznych dla lua może być uciążliwe. Ale w systemach większych niż około 4 MB nie zawracaliśmy sobie głowy specjalistycznymi stertami i pulami.__index
i__newindex
). Lepiej jest, jeśli można wykryć błędy w czasie kompilacji. Istnieją różne rzeczy, które możesz zrobić, aby to złagodzić.Gorąco polecam Luę, po prostu trochę z nią popracuj! Możesz także sprawdzić Squirrel , chociaż uważam, że ma mniejszą bazę użytkowników.
źródło
W rzeczywistości istnieją 3 wielkie zalety:
Czynniki te pozwalają ci jako twórcy gier na włączenie funkcji, które przyspieszą rozwój i poprawią jakość twojej gry.
Na przykład:
źródło
Z mojego doświadczenia trochę sprowadziłem.
Plusy
Cons
Ostateczny, osobisty werdykt: jeśli budujesz przyzwoitą grę i nie masz jeszcze języka skryptowego, zdobądź Luę. To będzie tego warte.
źródło
Garry's Mod to jeden przykład gry wykorzystującej Luę i C ++. Używają Lua do wszystkich modów, co znacznie ułatwia ich tworzenie. C ++ jest używany do wszystkich elementów wewnętrznych. Jedynym oszustwem, o którym mogę pomyśleć, jest fakt, że Lua nie jest tak szybki jak C ++.
źródło