簡體   English   中英

LuaBind:如何將特定的類實例綁定到Lua?

[英]LuaBind: How to bind specific instance of class to Lua?

(旁注:這是游戲編程)

使用LuaBind將整個類綁定到Lua很容易:

class test
{
   test()
   {
      std::cout<<"constructed!"<<std::endl;
   }

   void print()
   {
      std::cout<<"works!"<<std::endl;
   }
}

//別的地方

   module[some_lua_state]
   [
      class_<test>("test")
      .def(constructor<>())
      .def("print",&test::print)
   ];

現在我可以在Lua中創建該類的實例並使用它:

lua_example.lua

foo = test() //will print "constructed!" on the console
foo:print()  //will print "works!" on the console

但是,現在我想將一個特定的測試實例綁定到Lua。 這將使我能夠將對象傳遞給Lua,例如Player類的實例,並執行以下操作:

Player:SetPosition(200,300)

而不是采取艱難的方式,並有類似的東西

SetPosition("Player",200,300)

相應的C ++ SetPosition函數需要查找std :: map才能找到播放器。

這是否可能,如果是這樣,我怎么能在LuaBind中做到這一點?

您沒有將類的實例綁定到Lua。 類的實例只是數據,您可以通過常用方式將數據傳遞給Lua。 但是C ++對象很特殊; 因為它們是通過Luabind注冊的,所以你必須使用Luabind方法將它們提供給Lua腳本。

有幾種方法可以為Lua提供數據,Luabind涵蓋了所有這些方法。 例如,如果你有一個對象x ,它是一個向Luabind注冊的類X的指針,你有幾種方法可以給Lua x

您可以將x的值設置為全局變量。 這是通過Luabind的object接口和globals函數完成的:

luabind::globals(L)["NameOfVariable"] = x;

顯然,您可以將其放在另一個表中,該表位於另一個表中,可以從全局狀態訪問。 但是你需要確保表格都存在。

將此數據傳遞給Lua的另一種方法是調用Lua函數並將其作為參數傳遞。 你可以使用luabind::object接口獲取一個函數作為對象,然后使用luabind::call_function來調用它。 然后,您可以將x作為參數傳遞給函數。 或者,如果您更喜歡lua_pcall樣式語法,則可以將x包裝在luabind::object並使用luabind::object::push將其推入堆棧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM