有没有可能使用jint来操纵用XNA (C#)创建的3D环境,并在这个环境中添加功能(同样使用jint)?
发布于 2010-01-02 18:44:50
作为Jint的贡献者,我推荐你使用Jint。Jint使它比Lua所做的更简单。此外,我不知道这在Lua中是否可行,但你可以给它.NET对象,并在javascript中使用它们(Jint代表Javascript INTpreter)。您还可以使用权限集保护您的应用程序。下面是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;
}
}发布于 2010-01-01 23:14:33
Jint是一个选项,LUA是一个选项check out LuaForge
LUA是一种非常有趣且易于使用的语言,对协作多任务(协程)提供了很好的支持。它的基本数据类型是表(介于字典和数组之间),非常灵活和强大。
这是我刚刚写的一些东西,只是为了测试它。我为脚本注册了一个名为GTest的函数,该函数映射到名为LUA_GTest的对象中的C#方法。该方法接受一个通用对象,在脚本中,我向它传递了一个表,其中包含一个表,该表中包含一个表示双精度值的字符串。在C#中,我解开所有东西并返回一个基于双精度值的值。
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;
}
}发布于 2010-01-01 23:04:01
考虑如何为.Net选择脚本平台,让我们看看this SO question。
通常,您可以在XNA应用程序中构建脚本引擎。使用脚本引擎并在应用程序中提供挂钩与通过公共接口调用外部程序集没有太大区别。
https://stackoverflow.com/questions/1988767
复制相似问题