¿Es posible usar jint para manipular un entorno 3D creado con XNA (C#) y para agregar funcionalidad a este entorno (usando jint)?Jint + XNA (C#)
Respuesta
Eche un vistazo a this SO question, teniendo en cuenta cómo elegir una plataforma de scripting para .Net.
En general, seguro que puede crear un motor de scripting en su aplicación XNA. Usar un motor de secuencias de comandos y proporcionar enganches en su aplicación no es muy diferente de llamar a ensambles externos a través de interfaces públicas.
Jint es una opción, es una opción LUA echa un vistazo a LuaForge
LUA es un muy divertido y fácil de usar el lenguaje, con buen soporte para multitarea cooperativa (co-rutinas). Su tipo de datos básicos es una tabla (que es un cruce entre un diccionario y una matriz) que es muy flexible y potente.
Aquí hay algo que escribí justo ahora solo para probarlo. Estoy registrando una función para el script llamado GTest
que se asigna a un método C# en mi objeto llamado LUA_GTest
. El método acepta un objeto general, y en el script le paso una tabla que contiene una tabla que contiene una cadena que representa un doble. En C# estoy desenvolviendo todo y devolviendo un valor basado en el doble valor.
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 necesita más exposición para soluciones .net. –
Como contribuyente a Jint, recomendaría que Jint. Jint lo hace más simple que lo que hace Lua. Además, no sé si esto es posible con Lua, pero puedes darle objetos .NET y jugar con ellos en javascript (Jint significa Javascript INTpreter). También puede proteger su aplicación con el conjunto de permisos. Aquí está el mismo código proporcionado anteriormente con 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;
}
}
Hola Nicholas. Gracias por la publicacion. Realmente no he trabajado con la integración de scripts con un lenguaje .net antes. ¿Puedes darme un ejemplo de cómo podría manipular objetos en 3D (creados con C#) usando jint? Gracias – user241949
Hola, Seguramente puedo dártelo, pero creo que necesitaría una larga discusión sobre cómo hacer que estén disponibles en Jint: La primera posibilidad es hacer que el objeto del juego esté disponible directamente en Jint: Motor JintEngine = new JintEngine(). SetParameter ("juego", tuGameObject); La otra posibilidad es declarar solo los objetos que necesita. Por supuesto, esta forma es mucho menos dinámica. Depende de usted, y también depende de sus necesidades. Si desea analizar más sobre él, cree un hilo en http://jint.codeplex.com/Thread/List.aspx –
¡Gracias de nuevo! – user241949
- 1. C# XNA: ¿Motor AI?
- 2. ¿Cómo cargo un archivo JavaScript con Jint en C#?
- 3. C# XNA Posición del mouse
- 4. Motor de partículas - XNA/C#
- 5. ¿Alguien está haciendo depuración visual con Jint?
- 6. ¿Es "Jint - JavaScript Interpreter for .NET" confiable?
- 7. JNI: conversión de unsigned int a jint
- 8. Rendimiento delegado C# en el juego xna
- 9. XNA C# 2D juego de plataformas
- 10. Cómo llamar al destructor en C# XNA
- 11. configuración del juego en C# y XNA
- 12. C#/XNA pseudo-creación de números aleatorios
- 13. C# Matemáticas frente a XNA MathHelper
- 14. Cadenas mutables en WP7 C#/XNA?
- 15. C# desarrollo del juego después de XNA
- 16. XNA 4.0 con C# .NET 4.5?
- 17. C# XNA o C++ directX11 en el futuro?
- 18. Incrustar XNA en WinForms
- 19. XNA game tutorial
- 20. XNA game performance
- 21. XNA en el iPhone
- 22. XNA Target Audience
- 23. ¿Cómo usar XNA en WPF?
- 24. Controles XNA y GUI (p. Ej., Xaml y xna)
- 25. ¿Soporte para XNA en WP8?
- 26. Clase de jugador con mi juego C# XNA
- 27. ¿Se pueden hacer juegos reales con XNA y C#?
- 28. ¿Cómo puedo hacer una GUI para mi juego C# XNA?
- 29. XNA Girar textura 2D
- 30. Usando system.windows.forms con XNA
Una pregunta importante es esta: ¿quieres que tu aplicación se ejecute en xbox? si es así, tu elección se reduce bastante – Martin
No realmente. Solo me importa que funcione en una PC. – user241949