J'ai travaillé sur la manière de lier des classes C++ à Lua pour les utiliser dans un moteur de jeu, et j'ai rencontré un problème intéressant. J'ai suivi le tutoriel de ce site Web : http://tinyurl.com/d8wdmea . Après le tutoriel, j'ai réalisé que le code suivant qu'il proposait :
local badguy = Monster.create();
badguy.pounce = function(self, howhigh, bonus)
self.jumpbonus = bonus or 2;
self:jump(howhigh);
self:rawr();
end
badguy:pounce(5, 1);
Cela ajouterait seulement la fonction de bondissement à cette instance spécifique d'un monstre. J'ai donc changé le script qu'il a suggéré par le suivant :
function Monster:pounce(howhigh, bonus)
print("in pounce function");
print(bonus);
self.jumpbonus = bonus or 2
self:jump(howhigh);
self:rawr();
end
local badguy = Monster.create();
badguy:pounce(5,1);
Cependant, lorsque j'appelle la fonction pounce, le script se casse. Après d'autres tests, la seule façon dont j'ai pu appeler avec succès la fonction pounce était d'appeler la fonction en tant que membre statique de la classe Monster (le code de la fonction reste le même) :
Monster.pounce(badguy,5,1);
Syntaxiquement, badguy:pounce(5,1) est correct, mais n'appelle pas correctement la fonction. Est-ce que je fais quelque chose de mal, ou est-ce une limitation de la liaison entre lua et c++/la façon dont je lie les deux langages ?