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
- 1. XNA C# platformówka 2D Gra
- 2. C# Math vs. XNA MathHelper
- 3. Tworzenie numeru pseudolosowego C#/XNA
- 4. konfiguracja gier w C# i XNA
- 5. JNI: konwersja unsigned int do jint
- 6. Umieszczanie XNA w WinForms
- 7. Nie można rozwiązać typu "jint", a JNInv, jclass
- 8. Łączenie projektu zawartości (XNA) z projektem innym niż XNA
- 9. Kontrolki XNA i GUI (np. Xaml i xna)
- 10. Sieci XNA na Windows
- 11. XNA, bezpośredni X, OpenGL
- 12. Silnik fizyki 3d XNA
- 13. XNA - Symulowany śnieg
- 14. Testowanie urządzenia XNA
- 15. C#/XNA - Załaduj obiekty do pamięci - jak to działa?
- 16. C# XNA Visual Studio: Różnica między trybami "wydania" i "debugowania"?
- 17. zna kolejność operacji przy użyciu matrycy w XNA, C#
- 18. Następca/alternatywy dla 2D XNA?
- 19. Czy "Jint - Javascript Interpreter for .NET" jest niezawodny?
- 20. Jak korzystać z XNA w WPF?
- 21. XNA MathHelper.SmoothStep? Jak to działa?
- 22. Kilka prostych pytań XNA/HLSL
- 23. Bardzo proste menu w XNA
- 24. Silniki do gier 2D XNA
- 25. szeregowania XNA Prostokąt z Json.NET
- 26. Widok macierzy XNA - szukam wyjaśnienia
- 27. Tworzenie XNA poza Visual Studio
- 28. Zmniejszanie rozmiaru Texture2D w XNA
- 29. Jaki jest najlepszy blog XNA?
- 30. XNA - Uzyskaj rozdzielczość ekranu bieżącego
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