所以,我正在尝试将 Lua 实现为 C# 中的脚本语言。如果您将它用作控制台应用程序的一部分,它真的很简单。但我希望能够在 XNA 中创建一个游戏机。问题是 Lua.DoString() 似乎返回一个控制台行,而不是一个字符串 - 正如我所说,这对于控制台应用程序来说很好,但我想将它作为字符串添加到输出缓冲区,以便我可以显示它在游戏中,而不是在控制台窗口中。如果这令人困惑,我深表歉意 - 希望代码能够清除它。
using System;
using System.Collections.Generic;
using LuaInterface;
namespace LuaConsoleLibrary
{
public class LuaConsole
{
private Lua lua;
private bool isRunning = true;
private string input;
private List<string> outputBuffer;
public bool IsRunning
{
get { return isRunning; }
}
public LuaConsole()
{
this.lua = lua;
}
public void Run()
{
int i = 0;
while(isRunning)
{
outputBuffer.Add("> ");
input = Console.ReadLine();
outputBuffer.Add("");
try
{
lua.DoString(input);
}
catch(Exception e)
{
outputBuffer.Add(e.Message);
}
finally
{
outputBuffer.Add("");
}
}
}
}
}
基本上,我很困惑为什么lua.DoString(input);
应该工作而不是必须使用Console.WriteLine(lua.DoString(input));
. 我什至尝试过outputBuffer.Add(lua.DoString(input).ToString());
,因为 ToString 在那里有效,理论上应该可以工作。相反,它执行lua.DoString
然后抛出异常 - “对象引用未设置为对象的实例”。除非我弄错了,否则有问题的对象是Lua
,它是lua
一个有效的对象引用。无论如何,鉴于这两种解决方案都不起作用,我想知道是否有人对 LuaInterface 有足够的了解,可以提出另一种获得相同结果的方法。我基本上想要一些效果outputBuffer.Add(lua.DoString(input));
。顺便说一句,我用来测试的 Lua 命令是print("test")
- 也许print
以某种方式返回控制台行而不是字符串,但我想不出另一种从 Lua 返回字符串的方法。
如果我的问题是杂乱无章或解释不清的,我深表歉意 - 我试图尽可能简洁,但这是一个小众问题,我真的不知道如何解释它。哦,我确实尝试过谷歌,我浏览了 Stack Overflow 上所有 65 个左右的 LuaInterface 问题,所以我有 95% 的把握在问这个问题之前已经做了尽职调查。我猜,LuaInterface 并不是一个众所周知的工具。