Ich bin der Lead-Entwickler für Bitfighter, und ich benutze Benutzer-Skript-Bots mit Lua. Ich arbeite mit C++ und Lua mit Lunar, um sie zusammen zu kleben.Wie übergebe ich eine Liste von Objekten von C++ nach Lua?
Ich versuche etwas zu tun, das ich denke, sollte ziemlich einfach sein: Ich habe ein C++ Objekt in Lua (bot im folgenden Code), und ich rufe eine Methode darauf, dass (FindItems) C++ zu suchen den Bereich um den Roboter herum und gibt eine Liste der gefundenen Objekte zurück (TestItems und andere werden hier nicht gezeigt). Meine Frage ist einfach, wie kann ich die Liste der gefundenen Elemente in C++ zusammenstellen und zurückgeben und dann über sie in Lua?
Im Grunde möchte ich in der < < < < erstellen Liste der Elemente, senden Sie es an lua >>>> Block unten, und nehmen Sie die Korrekturen füllen ich unter dem der Lua-Code selbst, enthalten müssen .
Ich habe versucht, den Code einfach aber vollständig zu halten. Hoffe, hier ist nicht zu viel! Vielen Dank!
C++ Header-
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++
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-Code CPP-Datei
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
Sie suchen nach dem Weg, um Mond zu bekommen, um eine Tabelle mit Indizes von 1 bis fillVector.size() zu erstellen.Im einfachen Lua würde das durch Erstellen einer Tabelle und Hinzufügen der Elemente geschehen. Ich weiß nicht genug über Mond, um in diesem Rahmen spezifische Ratschläge zu geben. – RBerteig
Ja, das stimmt absolut, und da stecke ich fest. Ich kann mehrere numerische Elemente zu einer Tabelle hinzufügen, weiß aber nicht, wie mehrere Benutzerdatenelemente hinzugefügt werden. – Watusimoto
bot = LuaRobot (Roboter) - Dies ist eine Referenz auf unseren Bot --- Bitte, wie Sie das tun, wie bekommen Sie einen Verweis auf Ihren C++ Roboter? Ich habe versucht, eine Methode zu erstellen getCurrent (luastate *) lunar :: push (this) aber es funktioniert nicht .. Ich bitte dich .. – Icebone1000