6

Is it possible to use jint to manipulate a 3D environment created with XNA (C#), and to add functionality to this environment (again using jint)?

4

3 回答 3

4

作为 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-02T10:44:49.893 回答
2

Jint 是一个选项,LUA 是一个选项查看LuaForge

LUA 是一种非常有趣且易于使用的语言,对协作多任务(协程)提供了很好的支持。它的基本数据类型是一个非常灵活和强大的表格(它是字典和数组的交叉)。

这是我刚才写的东西,只是为了测试它。我正在为调用的脚本注册一个函数,该函数GTest映射到我的对象中的 C# 方法,称为LUA_GTest. 该方法接受一个通用对象,并且在脚本中我将一个表传递给它,该表包含一个表,该表包含一个表示双精度的字符串。在 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-01T15:14:33.157 回答
1

看看这个 SO question,考虑如何为 .Net 选择脚本平台。

一般来说,确保您可以将脚本引擎构建到您的 XNA 应用程序中。使用脚本引擎并在应用程序中提供挂钩与通过公共接口调用外部程序集没有太大区别。

于 2010-01-01T15:04:01.057 回答