【发布时间】:2013-08-12 21:58:40
【问题描述】:
所以,我正在尝试将 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 并不是一个众所周知的工具。
【问题讨论】:
-
在某些时候你不需要
new Lua()吗?否则,lua始终为空引用。this.lua = lua只是将字段lua分配给自己,那里应该有编译器警告。 -
^ 我认为他是对的。你没有在那个构造函数中做任何事情。
-
不错,迈克 z。我不敢相信我自己没有注意到……但实际代码(只是稍微)更复杂,Lua 实例作为参数传递到类中……所以,是的,这是一个大问题在我的示例代码中,但它绝对不能解决我的问题。
-
这篇文章可能对你有所帮助:dreamincode.net/forums/topic/…
-
@mikez - 所示代码(没有您发现的错误)有效 - 但仅作为控制台应用程序。我的问题是我看不到一种方法可以将 Lua 的输出读入 C# 中的字符串变量,以将其用作图形输入。
标签: c# xna console lua luainterface