Ist es möglich, jint zu verwenden, um eine mit XNA (C#) erstellte 3D-Umgebung zu bearbeiten und dieser Umgebung Funktionalität hinzuzufügen (wiederum unter Verwendung von jint)?Jint + XNA (C#)
Antwort
Schauen Sie sich this SO question an und überlegen Sie, wie Sie eine Skriptplattform für .Net auswählen.
Im Allgemeinen können Sie sicher ein Skriptmodul in Ihre XNA-Anwendung erstellen. Die Verwendung einer Skript-Engine und das Bereitstellen von Hooks in Ihrer App unterscheidet sich nicht wesentlich von dem Aufruf externer Assemblys über öffentliche Schnittstellen.
Jint ist eine Option, ist LUA eine Option aus überprüfen LuaForge
LUA ein wirklich Spaß und ist einfach zu verwendende Sprache, mit netter Unterstützung für kooperatives Multitasking (Koroutinen). Der grundlegende Datentyp ist eine Tabelle (eine Kreuzung zwischen einem Wörterbuch und einem Array), die sehr flexibel und leistungsfähig ist.
Hier ist etwas, das ich gerade geschrieben habe, nur um es zu testen. Ich registriere eine Funktion für das Skript mit dem Namen GTest
, das auf eine C# -Methode in meinem Objekt namens LUA_GTest
verweist. Die Methode akzeptiert ein allgemeines Objekt, und im Skript übergebe ich eine Tabelle mit einer Tabelle, die eine Zeichenfolge enthält, die ein Double repräsentiert. In C# packe ich alles aus und gebe einen Wert basierend auf dem doppelten Wert zurück.
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;
}
}
Schön - Lua braucht mehr Belichtung für .net-Lösungen. –
Als Beitrag zur Jint, würde ich Ihnen empfehlen Jint. Jint macht es einfacher als das, was Lua macht. Außerdem weiß ich nicht, ob das mit Lua möglich ist, aber Sie können es .NET-Objekten geben und mit ihnen in Javascript spielen (Jint steht für Javascript INTpreter). Sie können Ihre Anwendung auch mit dem Berechtigungssatz sichern. Hier ist der gleiche Code zuvor mit 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;
}
}
Hallo Nicholas. Danke für die Post. Ich habe noch nicht mit inetgrating Skripten mit einer .net Sprache gearbeitet. Können Sie ein Beispiel dafür, wie ich 3D-Objekte (erstellt mit C#) mit jint manipulieren könnte? Thanx – user241949
Hallo, ich sicher es dir geben kann, aber ich denke, es müßte eine lange Diskussion darüber, wie sie in Jint zur Verfügung zu stellen: Die erste Möglichkeit ist das Spiel-Objekt in Jint direkt zur Verfügung zu stellen: JintEngine Motor = new JintEngine(). SetParameter ("game", yourGameObject); Die andere Möglichkeit besteht darin, nur die Objekte zu deklarieren, die Sie benötigen. Natürlich ist dieser Weg viel weniger dynamisch. Es liegt an Ihnen und hängt auch von Ihren Bedürfnissen ab. Wenn Sie mehr darüber diskutieren möchten, erstellen Sie bitte einen Thread auf http://jint.codeplex.com/Thread/List.aspx –
Nochmals vielen Dank! – user241949
- 1. C#: XNA vs Nein XNA (Leistung)
- 2. Kollisionserkennung in C# XNA
- 3. C# Mathe vs XNA MathHelper
- 4. XNA C# 2D Platformer Spiel
- 5. C#/XNA/HLSL - Tiefenkarte verschraubt
- 6. C# XNA 2D Platformer Jumping
- 7. Ist "Jint - Javascript Interpreter für .NET" zuverlässig?
- 8. Wer macht visuelles Debugging mit Jint?
- 9. Nuget Paket konnte nicht installiert Jint
- 10. C#/XNA/HLSL - Wie erstellt man Schärfentiefe?
- 11. C# XNA Xbox HashSet und Tuple
- 12. C# Delegierte Leistung in XNA-Spiel
- 13. Player-Klasse mit meinem C# XNA-Spiel
- 14. C# XNA - Start zeichnen von unten-Mitte
- 15. C# XNA/Monogame: Aktivieren Maximize Button
- 16. XNA Netzwerkprobleme
- 17. XNA-Kollisionserkennung
- 18. Xna GameEngine für crossplatform
- 19. [C#] [XNA 3.1] Wie kann ich zwei verschiedene XNA-Fenster in einem Windows-Formular hosten?
- 20. XNA GameComponent Implementierungseinstellungen ...?
- 21. Verwenden von Js-Bibliotheken von Drittanbietern mit Jint
- 22. Verknüpfung Inhalt Project (XNA) zu einem nicht XNA Projekt
- 23. XNA- und GUI-Steuerelemente (z. B. Xaml und XNA)
- 24. photoshop blend mathe in XNA
- 25. XNA Music Mischen Echtzeit
- 26. XNA 3D-Physik-Engine
- 27. XNA 2D Spiel Engines
- 28. XNA Graphics Device Extension
- 29. XNA Framework Importers
- 30. XNA 2d Zeichnungsbibliothek
Eine wichtige Frage ist dies: Möchten Sie Ihre App auf xbox ausführen können? Wenn ja, ist Ihre Wahl ziemlich stark reduziert – Martin
Nicht wirklich. Ich sorge mich nur darum, dass es auf einem PC läuft. – user241949