Jaki język skryptowy poleciłbyś do projektu gry w C ++? [Zamknięte]

14

Przez pisanie tutaj skryptów mam na myśli nie tylko umieszczanie danych konfiguracyjnych w skrypcie, ale także skryptowanie części projektu, takich jak niektóre metody klasowe, testowanie specyficznej pętli gry itp. Nie byłoby to tylko przyspieszenie rozwoju, ale także pozwolenie graczom zobaczyć niektóre z nich skrypty poprawiające niektóre aspekty gry.

Niektóre języki, takie jak Lua, mają pewne opakowania, takie jak luabind, ale kiedy używałem go w przeszłości, miały problemy, ponieważ nie obsługiwały redefinicji metod w kontekście dziedziczenia.

Jakie są Twoje sugestie dotyczące używania języka lub opakowania?

Frédérick Imbeault
źródło

Odpowiedzi:

9

Gry wideo ze skryptami Lua Silniki gier ze skryptami
Lua

Myślę, że Lua jest najlepszym strzałem.

Ten artykuł dotyczy integracji Lua i C ++. To mówi:

LuaBind to świetny produkt, ale dla mnie wyglądał na zbyt skomplikowany. Po pierwsze, kod nie jest łatwy do naśladowania, gdzie znajdują się klasy i obiekty. Widząc również, że chciałem zintegrować Luę z aplikacją wxWidgets, używanie szablonów było trochę nie-nie (możesz czytać problemy między platformami na stronie wxWidgets).

Istnieje wiele innych bibliotek wiążących:

http://luabridge.sourceforge.net/
http://www.stackedboxes.org/~lmb/diluculum/
http://cpplua.sourceforge.net/
http://www.tecgraf.puc-rio.br/~ celes / tolua /

Jakie jest najlepsze opakowanie C ++ / Lua?

Po prostu wybierz i ciesz się.

lcpp
źródło
Tak, Lua jest dość prosta i bardzo łatwa do zintegrowania z C. W rzeczywistości jest to główny cel Lua, jakim jest język osadzony.
Marco Mustapic
Dzięki za odniesienie do LuaBind, być może kopanie do innych wiążących bibliotek przekonuje mnie do ponownego wzięcia Lui
Frédérick Imbeault
Sugeruję jednak, aby uruchamiać skrypty tylko w głównym wątku i podać dla niego alokator puli, jeśli wydajność jest istotna.
Kylotan
5

Byłem lubić Chaiscript ; Nie używałem go zbyt długo, ale jak dotąd wydaje się dość solidny.

W przeciwieństwie do Pythona lub lua, jest on zbudowany od podstaw do użytku z C ++. Proces wiązania wydaje się o wiele czystszy niż w przypadku luabind / etc.

Oto podsumowanie strony:

ChaiScript jest pierwszym i jedynym językiem skryptowym zaprojektowanym od podstaw z myślą o zgodności z C ++>. Jest to inspirowany ECMAScript, wbudowany język funkcjonalny.

ChaiScript jest licencjonowany na licencji BSD.

Riley Adams
źródło
Ciekawy. Co z testami wydajności? Czy istnieje porównanie ChaiScript / Lua / Python?
topright
Całkiem interesujące, czy są jakieś wady / błędy / wydajność, z jakimi się dotąd spotkałeś?
Frédérick Imbeault
Nie widziałem żadnych testów porównawczych, ale nie miałem jeszcze żadnych problemów z wydajnością ... moim głównym uchwytem do tej pory byłoby to, że nie dokonuje konwersji pośrednio między typami liczbowymi (więc pojawia się błąd, jeśli przekażesz wartość int do funkcja przyjmująca liczbę zmiennoprzecinkową itp.).
Riley Adams
1
Tylko informacja, ponieważ ten komentarz ma już 6 lat - ChaiScript dokonuje teraz niejawnej konwersji numerycznej.
lefticus
5

Polecam Lua .
Python jest również bardzo popularny. Korzysta z niego wiele polecanych silników gier (na przykład Blender).
C ++ :: Boost ma bibliotekę do pracy z Pythonem.
Czytałem o Wiewiórce , ale jej nie użyłem .

Możesz przeczytać ten przegląd Game Engine . Jest Scriptingkolumna. Widać, że Lua i Python są najpopularniejszymi językami skryptowymi.

w prawym górnym rogu
źródło
Jeśli chodzi o Boost, myślę, że może to ogromna biblioteka i wiele wielu rzeczy nie jest całkiem przydatnych we wszystkich projektach. W rzeczywistości luabind często używa Boosta i jest to jedna z rzeczy, które mi się nie podobają.
Frédérick Imbeault
1
Powiedziałbym, że to zaleta. Masz wiele wielu gotowych rozwiązań. A twój projekt ma tylko 1 zewnętrzną zależność - Boost. Niewiele wielu małych bibliotek (które używają różnych stylów, podejść, licencji, a te z kolei mogą mieć zewnętrzne ukryte zależności), które są trudne do aktualizacji, synchronizacji z twoim kodem i utrzymywania.
topright
1
I dołączasz tylko te biblioteki Boost (nagłówki), których potrzebujesz. Zwiększenie jest ogromne, ale nie przejmujesz się, dopóki nie będziesz potrzebować tego czy tamtego.
topright
A jeśli chodzi o Pythona i Luę, czy istnieją jakieś opakowania dla C ++, które pozwalają na nowo zdefiniować metody klas, tworzyć nowe metody itp.? I czy tą funkcją można sterować za pomocą kodu C ++ (dla bezpieczeństwa)? Jak powiedziałem, LuaBind robi te rzeczy, ale zawodzi w kontekście dziedziczenia, co jest dość powszechne w projekcie gry. Metody, które chciałbym na nowo zdefiniować, to na przykład testowanie specyficznej pętli gry, metody aktualizacji podmiotów, takich jak gracz, metoda aktualizacji samego świata gry itp.
Frédérick Imbeault
Lua nie ma klas i obiektów, ale można je emulować za pomocą tabel. Oto biblioteka Lua dla OOP, którą wolę: love2d.org/wiki/MiddleClass .
topright
4

Dlaczego nie zbudować własnego?

Jeśli masz czas, cierpliwość i chęć do nauki - zawsze możesz spróbować opracować własny silnik skryptowy ze wszystkimi potrzebnymi funkcjami i składnią.

Zalety

  1. Dowiesz się o interesującej części informatyki.
  2. Opracowanie „wewnętrznego” silnika skryptowego daje pełną kontrolę od początku do końca, umożliwiając dostosowanie silnika do dokładnie tego, czego potrzebujesz.
  3. Jeśli będziesz musiał wprowadzić jakieś zmiany później, mogą one nieco ułatwić poznanie własnych baz kodu, zamiast uczyć się od innych.
  4. Nie musisz się martwić o aktualizowanie silnika za pomocą łatek innych osób.

Niedogodności

  1. Czas. Niewiele osób to ma. Jeśli potrzebujesz czegoś TERAZ, wypróbuj już istniejący silnik (taki jak już zasugerowany).

  2. Prędkość. Wiele istniejących silników skryptowych działa bardzo szybko - niestandardowe rozwiązanie może nie być tak szybkie.

  3. Wielkość drużyny. Wiele istniejących silników skryptowych ma większe zespoły ludzi pracujących nad bazą kodu, niezależnie od tego, czy są to zespoły prywatne czy globalni wolontariusze, jest coś do powiedzenia na temat kodu, który jest sprawdzany i ponownie sprawdzany przez wiele innych osób.

  4. Silnik skryptów wymaga pewnej ilości wstępnego planowania, aby skutecznie działać. Trzeba też zaimplementować wiele podstaw, które mogą wcale nie mieć związku z rzeczywistym silnikiem skryptów.

  5. Twoja baza graczy / programiści musieliby przyzwyczaić się do silnika skryptów. Nie może to stanowić problemu, jeśli składnia i funkcjonalność są prawie takie same jak w większości współczesnych silników skryptowych, ale należy o tym pamiętać.

To nie jest wyczerpująca lista. Jeśli musisz wprowadzić wiele zmian w zapleczu istniejącego języka skryptowego, aby uzyskać pożądaną funkcjonalność, IMO prawdopodobnie powinieneś poszukać innego silnika, który będzie lepiej pasował do twoich wymagań lub po prostu zbuduj własny.

Zdaję sobie sprawę, że ludzie lubią rzucać się na „lenistwo” i „nie wymyślać na nowo koła”, ale myślę, że można coś powiedzieć o tym, jak się to robi. A konkretna implementacja prawdopodobnie będzie lepsza dla twojego projektu niż implementacja ogólna.

„Tworzenie systemów skryptowych w C ++” wydaje się być ulubionym artykułem (artykułami), które ludzie udostępniają podczas dyskusji na ten temat: http://www.gamedev.net/reference/list.asp?categoryid=76

Dalin Seivewright
źródło
2
Zgodziłem się, że ma to szczególną przewagę edukacyjną. Wymaga to jednak pewnej wiedzy i umiejętności w zakresie teorii języków programowania (które wiele osób MÓWI, że mają) oraz pewnej wiedzy w zakresie teorii komputerów. Jeśli te odpowiedzi są dla kogoś atrakcyjne, sugerowałbym tez dwie książki: amazon.com/gp/product/0136073476/ref=oss_product i amazon.com/gp/product/0534950973/ref=oss_product
Frédérick Imbeault
Byłbyś zaskoczony, jak daleko możesz się posunąć bez prawdziwej wiedzy o tych rzeczach. Wiele MUDów ma język skryptowy, który jest niewiele więcej niż listą instrukcji z kilkoma hackami umożliwiającymi warunkowe, a jednak mogą wiele osiągnąć dzięki temu samemu.
Kylotan
Byłem tam, zrobiłem to. Wiele się nauczyłem o analizie składni, projektowaniu kompilatorów, maszynach z kodami bajtowymi i tym podobnych. Następnym razem prawdopodobnie użyję Lua i jeszcze bardziej to docenię. :)
Kaz Dragon
2

Próbowałem Lua, Python, Scheme i Squirrel. Lua spisała się najlepiej; ma większą społeczność i lepsze wsparcie niż Squirrel oraz znacznie lepszą pamięć i parametry wydajności niż Python. Schemat działał również bardzo dobrze i ma naprawdę małego tłumacza, ale projektantom trudno było owinąć głowy funkcjonalnym językiem.

Crashworks
źródło