2016-11-10 12 views
0

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?

Antwort

1

, dass Ihr Problem beheben wird, sollte (und entfernen schließlich):

bool success = true; 
    try 
    { 
     LuaState.DoFile("main.lua"); 
    } 
    catch (NLua.Exceptions.LuaScriptException e) 
    { 
     success = false; 
     Console.WriteLine(e.ToString()); 
    }