그래서 C#에서 스크립트 언어로 루아를 구현하려고합니다. 콘솔 응용 프로그램의 일부로 사용하면 간단합니다. 하지만 XNA 내에서 게임 콘솔을 만들 수 있기를 원합니다. 문제는 Lua.DoString()이 문자열이 아닌 콘솔 줄을 반환하는 것입니다. 콘솔 응용 프로그램에서는 괜찮 았지만 출력 버퍼에 문자열을 추가하여 표시 할 수 있습니다. 콘솔 윈도우가 아닌 게임 내에서. 이 코드가 혼란 스럽다면 사과드립니다.LuaInterface로 문자열 반환
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("");
}
}
}
}
}
는 기본적으로, Console.WriteLine(lua.DoString(input));
를 사용하지 반대로 lua.DoString(input);
작동합니다 이유에 혼란 스러워요. 심지어는 outputBuffer.Add(lua.DoString(input).ToString());
을 시도해 보았습니다. ToString이 유효하기 때문에 이론적으로 작동해야합니다. 대신 lua.DoString
을 수행 한 다음 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."라는 예외를 throw합니다. 내가 실수하지 않는다면 문제의 객체는 Lua
이며, 이는 lua
을 유효한 객체 참조로 만듭니다. 어쨌든,이 두 가지 해결책이 작동하지 않는 것을 보면서, 누군가 LuaInterface에 대해 충분한 지식을 갖고 있으면 같은 결과를 얻는 다른 방법을 제안하게 될지 궁금합니다. 나는 기본적으로 outputBuffer.Add(lua.DoString(input));
의 효과를 원한다. 그건 그렇고, 내가 사용하고있는 루아 명령어는 print("test")
이다. 아마도 print
은 어떻게 든 문자열 대신 콘솔 라인을 반환하지만, 루아로부터 문자열을 반환하는 다른 방법을 생각할 수 없다.
내 문제가 덜컹 거리거나 잘못 설명되는 경우 사과드립니다. 가능한 한 간결하게하려고했지만 틈새 문제 일 뿐이며 설명하는 방법을 모르겠습니다. 오, 나는 Google을 사용해 봤고 스택 오버플로에 대해 65 개 정도의 LuaInterface 질문을 탐색 했으므로이 질문을하기 전에 실사를 95 % 확신했습니다. LuaInterface는 도구로 잘 알려져 있지 않습니다.
어떤 시점에서'새로운 루아()'가 필요하지 않습니까? 그렇지 않으면'lua'는 항상 null 참조입니다. 'this.lua = lua'는'lua' 필드를 할당하고 컴파일러 경고가 있어야합니다. –
^나는 그가 이것에 맞다고 생각한다. 당신은 그 생성자에서 아무것도하지 않습니다. –
잡기 좋은, mike z. 나는 그 자신을 알아 채지 못했다고는 믿을 수 없다 ... 그러나 실제 코드는 (단지 약간) 더 복잡하고 루아 인스턴스는 매개 변수로서 클래스에 전달된다 ... 그렇다, 거대한 문제이다. 내 예제 코드에서는,하지만 확실히 내 문제를 해결하지 않습니다. – bpunsky