Tôi là người dẫn đầu cho Bitfighter và đang thêm các chương trình theo kịch bản người dùng bằng Lua. Tôi đang làm việc với C++ và Lua sử dụng Lunar để dán chúng lại với nhau.Làm cách nào để chuyển danh sách các đối tượng từ C++ sang Lua?
Tôi đang cố gắng làm điều gì đó mà tôi cho là khá đơn giản: Tôi có đối tượng C++ trong Lua (bot trong đoạn mã bên dưới), và tôi gọi phương thức trên đó (findItems) khiến C++ tìm kiếm khu vực xung quanh robot và trả về một danh sách các đối tượng mà nó tìm thấy (TestItems và những đối tượng khác không được hiển thị ở đây). Câu hỏi của tôi chỉ đơn giản là làm thế nào để tôi lắp ráp và trả về danh sách các mặt hàng được tìm thấy trong C + +, và sau đó lặp qua chúng trong Lua?
Về cơ bản, tôi muốn để điền vào các < < < < Tạo danh sách các mục, trả lại cho lua >>>> khối dưới đây, và thực hiện bất kỳ điều chỉnh tôi có thể cần trong mã Lua chính nó, bao gồm dưới đây mà .
Tôi đã cố giữ mã đơn giản nhưng đầy đủ. Hy vọng không có quá nhiều ở đây! Cảm ơn!
C++ header nộp
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);
}
tập 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 Mã
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
Bạn đang tìm cách để có được âm lịch để tạo một bảng với các chỉ mục chạy từ 1 đến fillVector.size().Trong Lua đơn giản, điều đó sẽ được thực hiện bằng cách tạo một bảng và thêm các phần tử. Tôi không biết đủ về âm lịch để đưa ra lời khuyên cụ thể trong khuôn khổ đó. – RBerteig
Vâng, đó là hoàn toàn đúng, và đó là nơi tôi đang mắc kẹt. Tôi có thể thêm nhiều mục số vào một bảng nhưng không biết cách thêm nhiều mục userdata. – Watusimoto
bot = LuaRobot (Robot) - Đây là một tham chiếu đến bot của chúng tôi --- XIN, làm thế nào bạn làm điều đó, làm thế nào để bạn có được một tham chiếu đến C++ tạo robot của bạn ?? Tôi đã thử tạo một phương thức getCurrent (luastate *) âm lịch :: push (this) nhưng nó không hoạt động .. Tôi cầu xin bạn .. – Icebone1000