Je suis le développeur principal pour Bitfighter, et j'ajoute des bots scriptés par l'utilisateur en utilisant Lua. Je travaille avec C++ et Lua en utilisant Lunar pour les coller ensemble. J'essaie de faire quelque chose que je pense devrait être assez simple: J'ai un objet C++ dans Lua (bot dans le code ci-dessous), et j'appelle une méthode sur celui-ci (findItems) qui provoque la recherche C++ la zone autour du robot et renvoyer une liste des objets trouvés (TestItems et autres non affichés ici). Ma question est simplement comment puis-je assembler et retourner la liste des éléments trouvés dans C++, puis itérer sur eux dans Lua?Comment passer une liste d'objets de C++ à Lua?
Fondamentalement, je veux remplir le < < < < Créer liste des articles, retourner au bloc lua >>>> ci-dessous, et apporter des corrections je besoin dans le code Lua lui-même, examinés ci-après . J'ai essayé de garder le code simple mais complet. J'espère qu'il n'y a pas trop de choses ici! Merci!
C++ fichier en-tête
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++ fichier .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
};
code 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
Vous cherchez la façon d'obtenir lunar pour créer une table avec des index allant de 1 à fillVector.size().En plaine Lua, cela serait fait en créant une table et en ajoutant les éléments. Je ne sais pas assez sur lunar pour donner des conseils spécifiques dans ce cadre. – RBerteig
Oui, c'est tout à fait vrai, et c'est là que je suis coincé. Je peux ajouter plusieurs éléments numériques à une table, mais je ne sais pas comment ajouter plusieurs éléments de données utilisateur. – Watusimoto
bot = LuaRobot (Robot) - Ceci est une référence à notre bot --- S'IL VOUS PLAÎT, comment vous faites cela, comment obtenez-vous une référence à votre robot C++ créé ?? J'ai essayé de créer une méthode getCurrent (luastate *) lunaire :: push (ce), mais il ne marche pas work..I .. vous en prie – Icebone1000