所以我一直在使用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;
}
如果您感兴趣,这是主目录的内容。lua - file> 论如何,c#方法不打印"Success!",只打印"Doing stuff",我也不知道为什么什么都没发生它也没有打印出异常。那么这里发生了什么,我该如何解决这个问题?
这应该可以解决您的问题(并最终删除):
bool success = true;
try
{
LuaState.DoFile("main.lua");
}
catch (NLua.Exceptions.LuaScriptException e)
{
success = false;
Console.WriteLine(e.ToString());
}