私はBitfighterのリード開発者であり、Luaを使ってユーザスクリプト化されたボットを追加しています。私はLunarを使ってC++とLuaを一緒に接着しています。C++からLuaにオブジェクトのリストを渡すにはどうすればよいですか?
私はかなりシンプルでなければならないことをやろうとしています:私はLua(以下のコードではボット)にC++オブジェクトを持っていて、C++に検索させる(findItems)ロボット周辺の領域を検索し、見つかったオブジェクトのリストを返します(ここでは示されていないTestItemsなど)。私の質問は、単にC++で見つけたアイテムのリストをアセンブルして返し、それをLuaで繰り返し処理する方法です。
基本的に、私は < < < <ブロックの下>>>> LUAにそれを返す、アイテムのリストを作成し、私はLuaのコード自体に必要がある場合があります任意の修正を行い、その下に含まに記入したいです。
私はコードを単純ではあるが完全なものにしています。あまりにもここではないことを願っています!ありがとう!
C++ヘッダーが
class TestItem : public LuaObject
{
public:
TestItem(); // C++ constructor
///// Lua Interface
TestItem(lua_State *L) { } ; // Lua constructor
static const char className[];
static Lunar<TestItem>::RegType methods[];
S32 getClassID(lua_State *L) { return returnInt(L, TestItemType); }
};
class LuaRobot : public Robot
{
LuaRobot(); // C++ constructor
///// Lua Interface
LuaRobot(lua_State *L) { } ; // Lua constructor
static const char className[];
static Lunar<LuaRobot>::RegType methods[];
S32 findItems(lua_State *L);
}
C++ .cppファイル
const char LuaRobot::className[] = "Robot"; // Class name in Lua
// Define the methods we will expose to Lua
Lunar<LuaRobot>::RegType LuaRobot::methods[] =
{
method(LuaRobot, findItems),
{0,0} // End method list
};
S32 LuaRobot::findItems(lua_State *L)
{
range = getIntFromStack(L, 1); // Pop range from the stack
thisRobot->findObjects(fillVector, range); // Put items in fillVector
<<<< Create list of items, return it to lua >>>>
for(int i=0; i < fillVector.size(); i++)
do something(fillVector[i]); // Do... what, exactly?
return something;
}
/////
const char TestItem::className[] = "TestItem"; // Class name in Lua
// Define the methods we will expose to Lua
Lunar<TestItem>::RegType TestItem::methods[] =
{
// Standard gameItem methods
method(TestItem, getClassID),
{0,0} // End method list
};
Luaのコード
bot = LuaRobot(Robot) -- This is a reference to our bot
range = 10
items = bot:findItems(range)
for i, v in ipairs(items) do
print("Item Type: " .. v:getClassID())
end
lunarで1からfillVector.size()までのインデックスを持つテーブルを作成する方法を探しています。普通のLuaでは、それはテーブルを作成して要素を追加することによって行われます。私は、そのフレームワークで具体的な助言を与えるために月面について十分に知りません。 – RBerteig
はい、それは絶対に正しいことです、そして、それは私が立ち往生したところです。テーブルに複数の数値項目を追加できますが、複数のユーザーデータ項目を追加する方法はわかりません。 – Watusimoto
bot = LuaRobot(Robot) - これは私たちのボットへの参照です。どうぞ、どうやってC++の作成したロボットへの参照を取得しますか?私はgetCurrent(luastate *)lunar :: push(this)というメソッドを作成しようとしましたが、うまくいきませんでした。私はあなたに尋ねます.. – Icebone1000