2012-09-02 63 views
0

我曾經多次使用Lua作爲最終用戶,我似乎記得能夠在Lua中創建一個方法,然後通過RegisterFunction調用將該方法註冊到程序中。Lua在C#混淆界面

我知道我將不得不在我的應用程序內部創建RegisterFunction調用以使此設置生效,但是我的問題是我是否必須自己實現對Lua內部方法的支持?

據我所知目前唯一的選擇是DoString和DoFile,我無法在任何地方找到任何幫助。

我試圖添加Lua到我的遊戲設置所有的實體代碼,我有它的設置允許我在每個實體類型的某些事件中放入腳本,並且我想將Lua方法附加到這些事件給他們打電話。

例如:

OnDamagedEvent += DoLuaMethod(method, Entity ID); 

從我的任何程序是如何工作的,我不會認爲這將有可能從只是「DoString」執行整個方法,除非該字符串包含整個方法一次認識,我想它可以,但是它應該如何使用?我曾計劃過每次發送一行到引擎。

如果我在Lua中定義一個方法,它會在lua中定義的永久(在這種情況下)被使用嗎?

如果是這樣,我怎樣才能將訪問器訪問到C#中,然後訪問它,發送所需的信息來調用參數(我記得具有特定方法的類型,您必須從中選擇,以便它知道什麼信息發送到該方法)

我道歉,如果我聽起來像一個總noob不知道如何設置的東西,似乎這麼簡單的概念,我只是不知道如何奠定了代碼和什麼方法從LuaInterface我應該使用!

預先感謝任何幫助:)

回答

0

好吧,我發現所有的答案我的問題。

LuaInterface有一個「LuaFunction」類,您可以用它來保護lua中的函數。

腳本運行後,任何已經初始化的函數都將在腳本運行後保持初始化。

您可以通過使用Lua.GetFunction(函數名),其中的Lua referances你的Lua的實例保存功能(在運行該腳本後)設置LuaFunction對象

我說在我公開的方法了一些新的方法:RegisterEntityEvent和RegisterGlobalEvent與幾個PARAMATERS讓我更加具體,以我想添加這個方法,它的設置是這樣哪個事件:

public static void RegisterEntityMethod(string MethodName, string EntityType, string EventType) 
{ 
    EntityTypes[EntityType].Events[EventType] += CallLuaMethod(LuaEngine.LuaVM.GetFunction(name)); 
} 

/// \ 那是一個例子OFC,未經測試

要調用它,只需運行LuaFunction.Call(Parameters);

這使我可以從我的遊戲中的事件處理程序中調用我的Lua腳本中的方法。

這是因爲我認爲這是那麼容易,只是不容易找到的地方,以瞭解如何做到這一點:d

這裏:http://forum.junowebdesign.com/net-programming/30025- luainterface-explained.html>