如何在 NLua 中处理 LuaScriptException

我在使用SFML.Net构建游戏引擎,使用NLua进行游戏脚本编程。我有一个方法在我的BaseGame类中,用于运行Lua脚本并在Lua侧添加一些对象和方法等,此方法包含try/catch块来捕获任何异常。

 public bool Start(uint x = 800U, uint y = 600U)
 {
     LuaState = new Lua();
     GameTime = new Time();
     Window = RenderWindow.FromResolution(new Vector2u(x, y));
     Console.WriteLine(Directory.GetCurrentDirectory() + @"\main.lua");
     if (File.Exists("main.lua"))
     {
         Console.WriteLine("正在执行");
         //导入程序集和全局变量
         LuaState.LoadCLRPackage();
         LuaState.DoString(@" import ('Orakel')");
         LuaState["Window"] = Window;
         LuaState["GameTime"] = GameTime;

         //沙盒代码:
         LuaState.DoString(@"import = function () end");

         //加载实际的Lua文件
         bool success = true;
         try
         {
             LuaState.DoFile("main.lua");
         }
         catch (NLua.Exceptions.LuaScriptException e)
         {
             Console.WriteLine(e.ToString());
         }
         finally
         {
             success = false;
         }
         if (!success) { return false; }
         Console.WriteLine("成功!");
     }
     else
     {
         //TODO:编写本机消息框或类似功能
         DialogResult res = MessageBox.Show("未在工作目录中找到main.lua!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
         if (res == DialogResult.OK)
         {
             return false;
         }
     }
     return true;
 }

如果您感兴趣,以下是main.lua文件的内容

local Drawables = {}

--在游戏启动时运行
function Begin()
    print("hooray")
end

--每帧都运行
function Update(delta)
    if UserInputService.IsKeyPressed(KeyCode.A) then
        print(delta)
    end
end

--每帧都运行
function Draw()

end

function Exit()
   print("exited")
end

无论如何,C#方法并没有输出"Success!",只有"进行中",而且我不知道为什么什么都没有发生。它也没有输出异常。我该怎么解决这个问题?

点赞
用户1887648
用户1887648

这应该可以解决你的问题(同时移除finally代码块):

bool success = true;
try
{
    LuaState.DoFile("main.lua");
}
catch (NLua.Exceptions.LuaScriptException e)
{
    success = false;
    Console.WriteLine(e.ToString());
}
2016-11-10 15:28:12