2016-11-10 2 views
0

J'ai donc travaillé sur un moteur de jeu simple en utilisant SFML.Net pour les graphismes et quoi d'autre, et NLua pour le scripting des jeux. J'ai donc cette méthode dans ma classe BaseGame qui est supposée exécuter un script Lua et ajouter quelques objets et méthodes, etc. au côté Lua. J'ai un bloc try/catch pour capturer toutes les exceptions.Gestion de LuaScriptException en 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; 
    } 

Si vous êtes intéressé, voici le contenu du 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 

Quoi qu'il en soit, la méthode C# n'imprime pas "Le succès!", Seulement "faire des choses" , et je ne sais pas pourquoi rien ne se passe. Ce n'est pas non plus une exception. Alors qu'est-ce qui se passe ici et comment puis-je résoudre ce problème?

Répondre

1

qui est devrait résoudre votre problème (et supprimer enfin):

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