Обработка LuaScriptException в NLua
Так что я работал над простым игровым движком, использующим 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("Doing stuff");
//Import assembly and globals
LuaState.LoadCLRPackage();
LuaState.DoString(@" import ('Orakel')");
LuaState["Window"] = Window;
LuaState["GameTime"] = GameTime;
//Sandbox the code:
LuaState.DoString(@"import = function () end");
//Load the actual Lua file
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("Success!");
}
else
{
//TODO: Write a native message box or something
DialogResult res = MessageBox.Show("main.lua not found in working directory!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
if (res == DialogResult.OK)
{
return false;
}
}
return true;
}
Если вам интересно, вот содержимое main.lua -file
local Drawables = {}
--Runs on game start
function Begin()
print("hooray")
end
--Runs every frame
function Update(delta)
if UserInputService.IsKeyPressed(KeyCode.A) then
print(delta)
end
end
--Runs every frame
function Draw()
end
function Exit()
print("exited")
end
В любом случае, метод C# НЕ выводит "Success!", Только "Doing stuff", и я понятия не имею, почему ничего не происходит. Это также не распечатывание исключения. Так что здесь происходит и как мне это исправить?
1 ответ
Решение
Это должно исправить вашу проблему (и, наконец, удалить):
bool success = true;
try
{
LuaState.DoFile("main.lua");
}
catch (NLua.Exceptions.LuaScriptException e)
{
success = false;
Console.WriteLine(e.ToString());
}