Also habe ich an einer einfachen Spielengine mit SFML.Net für die Grafik gearbeitet und was nicht, und NLua für das Skripting von Spielen. Also habe ich diese Methode in meiner BaseGame-Klasse, die ein Lua-Skript ausführen soll und einige Objekte und Methoden usw. zur Lua-Seite hinzufügen soll. Ich habe einen try/catch-Block zum Erfassen von Ausnahmen.Umgang mit LuaScriptException in NLua
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;
}
Wenn Sie interessiert sind, sind hier die Inhalte der main.lua -datei
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
Wie dem auch sei, die C# Methode nicht druckt out "Erfolg!", Nur "Doing stuff" , und ich habe keine Ahnung, warum nichts passiert. Es wird auch keine Ausnahme ausgedruckt. Also, was ist hier los und wie repariere ich das?