在 NLua 中处理 LuaScriptException
Handling LuaScriptException in NLua
所以我一直在开发一个简单的游戏引擎,使用 SFML.Net 处理图形和其他内容,使用 NLua 编写游戏脚本。所以我在我的 BaseGame -class 中有这个方法,它应该 运行 一个 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 文件
的内容
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",
我不知道为什么什么都没有发生。它也没有打印出异常。那么这是怎么回事,我该如何解决这个问题?
这应该可以解决您的问题(并最终删除):
bool success = true;
try
{
LuaState.DoFile("main.lua");
}
catch (NLua.Exceptions.LuaScriptException e)
{
success = false;
Console.WriteLine(e.ToString());
}
所以我一直在开发一个简单的游戏引擎,使用 SFML.Net 处理图形和其他内容,使用 NLua 编写游戏脚本。所以我在我的 BaseGame -class 中有这个方法,它应该 运行 一个 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 文件
的内容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", 我不知道为什么什么都没有发生。它也没有打印出异常。那么这是怎么回事,我该如何解决这个问题?
这应该可以解决您的问题(并最终删除):
bool success = true;
try
{
LuaState.DoFile("main.lua");
}
catch (NLua.Exceptions.LuaScriptException e)
{
success = false;
Console.WriteLine(e.ToString());
}