虽然讨论的是自动生成,但是本人用的是手动导出,前后花了2周多把cocos2dx的主要常用接口一个个导出,剩下的接口如果项目要用到再慢慢增加。维护到现在一共有6千多行C++导出成LUA的代码。性能已经优化到极致,为什么这么说?看下面的导出代码就知道
int lua_ccNode_setPosition(lua_State*L){
auto self = LUA_GET_SELF(ccNode);
auto x = LUA_GET_NUMBER();
auto y = LUA_GET_NUMBER();
self->setPosition(x, y);
return 0;
}
LUA_GET_SELF是一个宏,用lua_topointer把lua的lightuserdata强转ccNode;LUA_GET_NUMBER直接用的是luaL_checknumber,然后每次调用这些宏的时候,把numArg自增1就可以少掉一些麻烦。如果你还能想到比这个性能更高的方案,请一定要告诉我。
手动导出有更强的可控性和灵活性,虽然会增加出错的概率,时间上估计和自动导出没差多少。
现在这套方案没有像cocoslua那么使用方便,cocoslua只要导出就可以使用。这套方案还需要到lua层进行二次封装,我现在的做法是创一个table,[0]保存c++对象的指针,调用方法时把[0]传进去。虽然麻烦了点,但是性能已经不是cocoslua能比的了!