我是Bitfighter的首席开发人员,并且正在使用 Lua 添加用户脚本机器人。我正在使用 C++ 和 Lua 使用 Lunar 将它们粘合在一起。
我正在尝试做一些我认为应该非常简单的事情:我在 Lua 中有一个 C++ 对象(下面的代码中的机器人),我在它上面调用了一个方法(findItems),它导致 C++ 搜索周围的区域机器人并返回它找到的对象列表(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