2012-01-21 75 views
2

我使用OpenTK庫在C#/ Mono中編寫電腦遊戲。我想用Lua來編寫遊戲腳本,所以那些對C#一無所知的人也可以編輯腳本,關卡等等。但問題是,我找不到如何在C#/ Mono中使用Lua 。我發現了驚人的LuaInterface,然而it doesn't work on Mono。我試過了,它在Windows上工作,但它不在Linux上(Ubuntu)。用linux替代替換lua51.dll不會簡單地工作。在C#/ Mono中使用Lua

我想問一下,是否有任何合適的方式使用LuaInterface與Mono(我沒有找到任何LuaInterface的源代碼來編輯和重建它;我還聽說LuaInterface的舊版本在Mono上工作,但是我沒有在任何地方找到它們供下載),或者如果有任何其他合適的C#/ Mono庫用於以前,並且您知道它的工作原理。我一直在尋找很長一段時間,但我沒有找到任何東西,我不想花幾個禮拜來編程。

我想它可能會使用C#代替腳本而不是Lua,但我不太喜歡這個想法,雖然我不知道爲什麼。

回答

2

.Net(也包含在Mono中)中有一項功能叫做Dynamic Language Runtime

我不知道Lua被支持,但有DLR實現PythonRuby - 這兩個工作都在單聲道和Microsoft CLR上工作。

有關使用C#作爲腳本語言的信息,請查閱this question

編輯:其實,有一個IronLua項目,但我不知道它有多完整。

+0

我已經爲您的答案投了票,但我不想使用DLR,因爲它使任何人都可以使用您的應用程序作爲其病毒,間諜軟件等的主機。如果我使用DLR,C#和我讓任何人都可以編輯腳本併發布它們,然後任何人都可以使用系統庫編寫任何腳本(刪除系統文件,查殺進程,卸載應用程序等)。那麼,是否可以使用DLR,但是隻限制某些庫的訪問權限?我希望你明白我的意思。 – TomsonTom

+1

@TomsonTom您可以使用特權減少的方式託管AppDomain中的腳本。請參閱:http://msdn.microsoft.com/en-us/library/bb763046.aspx和此:http://stackoverflow.com/questions/1362757/how-to-host-an-ironpython-engine-in -a-separate-appdomain –

+0

謝謝,我接受你的評論,因爲它似乎是我唯一的解決方案。 :) – TomsonTom

1

您可以使用lua grammarthis answer作爲找到編譯器生成器來創建c#代碼的方法。我認爲這是支持外部語言支持的最好也是最簡單的方法。爲什麼?您可以快速添加語法結構的任何事件並添加您想要的任何語言擴展。

+0

從語法實現語言(甚至使用解析器生成器)比使用現有實現複雜得多,只需聲明函數和變量綁定即可完成。更不用說編寫高效的編譯器和虛擬機是一項相當複雜的任務 - 這是您必須在解析器生成器創建的解析器之上構建自己的東西。 –

+0

描述方式的優勢取決於項目規模和項目需求。而且我也認爲使用這種技術解決問題並不難,可能需要花費幾天的時間學習和發展一半的弱點。 – FLCL

+0

感謝您的想法,但我不打算做這樣複雜的事情。但我投票贊成,因爲這是一個有效的解決方案。 :) – TomsonTom