Czy można używać jint do manipulowania środowiskiem 3D utworzonym za pomocą XNA (C#) i do dodania funkcjonalności do tego środowiska (ponownie za pomocą jint)?Jint + XNA (C#)
Odpowiedz
Spójrz na this SO question, biorąc pod uwagę, jak wybrać platformę skryptową dla .Net.
Ogólnie rzecz biorąc, możesz zbudować silnik skryptowy w swojej aplikacji XNA. Używanie silnika skryptów i dodawanie haczyków do aplikacji nie różni się zbytnio od wywoływania zewnętrznych złożeń za pośrednictwem publicznych interfejsów.
Jint jest opcją, LUA jest opcją sprawdzeniu LuaForge
LUA jest naprawdę zabawny i łatwy w użyciu języka, z miłą obsługą wielozadaniowości (współprogram). Jego podstawowym typem danych jest tabela (która jest krzyżówką między słownikiem a tablicą), która jest bardzo elastyczna i wydajna.
Oto coś, co napisałem właśnie teraz, aby go przetestować. Rejestruję funkcję skryptu o nazwie GTest
, który odwzorowuje metodę C# w moim obiekcie o nazwie LUA_GTest
. Metoda akceptuje obiekt ogólny, aw skrypcie przekazuję mu tabelę zawierającą tabelę zawierającą ciąg znaków reprezentujący podwójne. W C# rozpakowuję wszystko i zwracam wartość na podstawie podwójnej wartości.
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.Run();
}
private void Run()
{
Lua lua = new Lua();
var methodInfo = typeof(Program).GetMethod("LUA_GTest", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
lua.RegisterFunction("GTest", this, methodInfo);
lua.DoString("GTest({{\"3.3\"}})");
}
private double LUA_GTest(object d)
{
Console.WriteLine("Got {0} - {1}", d.GetType().ToString(), d.ToString());
while (d is LuaTable)
{
d = ((LuaTable)d)[1];
Console.WriteLine("Got {0} - {1}", d.GetType().ToString(), d.ToString());
}
if (d is string)
{
d = double.Parse((string)d);
Console.WriteLine("Got {0} - {1}", d.GetType().ToString(), d.ToString());
}
if (d is double)
return (double)d * 2;
return 0;
}
}
Nice - Lua potrzebuje więcej ekspozycji dla rozwiązań .net. –
jako współpracownika Jint, polecam Ci Jint. Jint sprawia, że jest to prostsze niż to, co robi Lua. Co więcej, nie wiem, czy jest to możliwe w przypadku Lua, ale możesz nadać obiektom .NET i grać z nimi w javascript (Jint oznacza JavaScript INTpreter). Możesz także zabezpieczyć swoją aplikację za pomocą Ustawień uprawnień. Oto ten sam kod podany wcześniej w Jint:
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.Run();
}
private void Run()
{
JintEngine engine = new JintEngine();
engine.SetFunction("GTest", new Jint.Delegates.Func<object, double>(LUA_GTest));
engine.Run("GTest([['3,3']])");
}
private double LUA_GTest(object d)
{
Console.WriteLine("Got {0} - {1}", d.GetType().ToString(), d.ToString());
while (d is ArrayList)
{
d = ((ArrayList)d)[0];
Console.WriteLine("Got {0} - {1}", d.GetType().ToString(), d.ToString());
}
if (d is string)
{
d = double.Parse((string)d);
Console.WriteLine("Got {0} - {1}", d.GetType().ToString(), d.ToString());
}
if (d is double)
return (double)d * 2;
return 0;
}
}
Cześć Nicholas. Dzięki za post. Nie pracowałem wcześniej z inetgrowaniem skryptów z językiem .net. Czy możesz podać przykład, w jaki sposób mogę manipulować obiektami 3d (utworzone za pomocą C#) za pomocą jint? thanx – user241949
Witam, Witam, Na pewno dam ci to, ale myślę, że będzie potrzebna długa dyskusja, jak je udostępnić w Jint: Pierwsza możliwość to udostępnienie obiektu gry bezpośrednio w Jint: Silnik JintEngine = nowy JintEngine(). SetParameter ("game", yourGameObject); Inną możliwością jest zadeklarowanie tylko potrzebnych obiektów. Oczywiście ten sposób jest znacznie mniej dynamiczny. To zależy od Ciebie, a także zależy od Twoich potrzeb. Jeśli chcesz porozmawiać o tym więcej, utwórz wątek na http://jint.codeplex.com/Thread/List.aspx –
Jeszcze raz dziękuję! – user241949
Ważne pytanie: czy chcesz, aby aplikacja działała na Xboksie? jeśli tak, twój wybór jest dość spory. – Martin
Niezupełnie. Dbam tylko o to, by działał na PC. – user241949