Czytam książkę o tworzeniu gier, w której pokazują, jak tworzyć skrypty do gry w Lua. Programują Luę i używają jej z C ++, ale zastanawiałem się, czy istnieje biblioteka lub API do używania Lua z C #: konkretnie z XNA do tworzenia gier na PC i XBox 360?
18
Odpowiedzi:
Wskazałbym to (http://www.xnua.com/xna_lua_xnua), ale nie był aktualizowany przez długi czas.
C # jest świetnym językiem i może w pewnym sensie być używany jako język skryptowy w twojej grze c #. Nick Gravelyn stworzył kilka ciekawych samouczków na temat silnika kafelkowego (http://blog.nickgravelyn.com/downloads/#tileengine) i użył niestandardowego silnika skryptowego do uruchomienia okna dialogowego. Ma również podstawowy przykład, gdy dowiedział się o słowie kluczowym „plon”: http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/
źródło
Jeśli szukasz skryptów w C #, zdecydowanie spójrz na IronPython . To nie jest po prostu API Pythona dla C #, to w rzeczywistości całkowicie oddzielna implementacja Pythona, która kompiluje się do tego samego zestawu CLR (z tą samą wydajnością) co C #, ale może być interfejsowana jako język skryptowy. Każde opakowanie Lua dla C # byłoby znacznie wolne ze względu na obciążenie Marshalling.
źródło
Jak powiedział Sean, warto spojrzeć na IronPython. IronPython jest w rzeczywistości jedną z niewielu dynamicznych implementacji językowych dla platformy .NET ukierunkowanych na Dynamic Language Runtime (DLR). Istnieje co najmniej jeden projekt open source mający na celu wdrożenie Lua na DLR (jak ten ), ale nie jestem pewien, czy są jakieś implementacje w trakcie realizacji. Dobrze zaimplementowany zestaw powiązań DLR dla Lua powinien zapewniać wydajność na równi z IronPython i IronRuby i byłby znacznie szybszy niż opakowanie Lua. Dla porównania IronPython ogólnie działa lepiej niż CPython (czasami znacznie lepiej).
Uwaga: Jako ElementCy stwierdza poniżej, języków DLR nie są zazwyczaj obsługiwane na Xbox 360. Jednak nie jest „interpretować tryb” w DLR. Nie wiem wystarczająco dużo, aby to powiedzieć, ale może być możliwe, aby IronPython (lub inne implementacje języka DLR) działał na Xbox 360 w trybie interpretowanym, choć wydajność na pewno ucierpiałaby. Może warto zapytać kogoś z zespołu DLR, czy wie, że to możliwe. Jeśli nie, Xbox 360 powinien otrzymać wsparcie Reflection.Emit w ramach nadchodzącej obsługi Silverlight. Jeśli i kiedy tak się stanie, wyobrażam sobie, że uruchomienie DLR i uruchomienie na Xbox 360 nie będzie problemem.
źródło
Najlepszym rozwiązaniem, jakie mogę ci dać, jest po prostu skrypt w C #. Możesz je skompilować w czasie wykonywania, gdy celujesz w okna i skompilujesz je wcześniej dla Xboksa. (jako dll)
To byłoby najłatwiejsze rozwiązanie. Możesz to również zrobić w VB.NET lub dowolnym języku .NET. (nie jestem pewien co do skryptów) Zasadniczo mówię, aby mieć twoje skrypty we własnej bibliotece DLL. Możesz je skompilować w czasie wykonywania w systemie Windows. (czy naprawdę chcesz, aby robili to na Xbox 360 ?, nie możesz tam aktualizować swoich gier, przynajmniej nie sądzę)
Rozumiem twoją frustrację, chciałem też użyć Lui.
Podsumowując: 1) Zbuduj go w środowisku uruchomieniowym w systemie Windows 2) Zbuduj go wcześniej na Xbox 360
Właśnie to polecam.
źródło
Interpreter Lua jest niezarządzany, AFAIK, więc nie można go uruchomić na Xboksie na Xboksie
Możesz użyć interpretera JavaScript o nazwie Jint, który nie opiera się na DLR i działa na Xbox ( http://jint.codeplex.com/ )
źródło
Technicznie nie odpowiada na twoje pytanie (nie działa na Xboksie ), ale LuaInterface pozwala stosunkowo bezboleśnie integrować Lua z C #.
źródło
Aby zaktualizować to pytanie, spędziłem ostatni dzień na obszernym wyszukiwaniu i odkryłem, że użycie UniLua (stworzonego do użytku z jednością, czystą implementacją C #) jest najlepszą i najskuteczniejszą opcją uzyskania Lua na Xbox. Rozebrałem go, wyjąłem cały materiał Jedności i działa świetnie.
Dodałem także pewne funkcje znalezione w LuaInterface, przeciążając operatora [] dla LuaState i tym podobne.
CFWLua
Mam nadzieję, że to się przydało.
źródło