CardinalSplineTo导出到Lua

感谢原作者的心情劳作:

http://blog.csdn.net/y505772146/article/details/43160205

   基于Cocos2d-lua3.10的引擎版本中,CardinalSplineTo的action方法是没有导出到Lua中的,所以在使用CardinalSplineTo模拟样条曲线进行运动时是有问题的,提示对应的create方法找不到,所以这里记录下一下CardinalSplineTo的create方法导出步骤:

   01,先找到 cocos\scripting\lua-bindings\manual\cocos2d目录下的lua_cocos2dx_manual.cpp文件,打开之后全局搜索CardinalSplineTo,发现没有搜索到,但是CardinalSplineBy却可以搜到,可以仿照CardinalSplineBy添加进相应的导出方法:

  1. int register_all_cocos2dx_manual(lua_State* tolua_S)  
  2. {  
  3.     if (NULL == tolua_S)  
  4.         return 0;  
  5.       
  6.     extendNode(tolua_S);  
  7.     extendScene(tolua_S);  
  8.     extendLayer(tolua_S);  
  9.     extendMenuItem(tolua_S);  
  10.     extendMenuItemImage(tolua_S);  
  11.     extendMenuItemLabel(tolua_S);  
  12.     extendMenuItemFont(tolua_S);  
  13.     extendMenuItemSprite(tolua_S);  
  14.     extendMenuItemToggle(tolua_S);  
  15.     extendMenu(tolua_S);  
  16.     extendScheduler(tolua_S);  
  17.     extendSequence(tolua_S);  
  18.     extendCallFunc(tolua_S);  
  19.     extendSpawn(tolua_S);  
  20.     extendCardinalSplineBy(tolua_S);  
  21.     extendCardinalSplineTo(tolua_S); //这一行是添加进去的  
  22.     extendCatmullRomBy(tolua_S);  
  23.     extendCatmullRomTo(tolua_S);  
  24.     extendBezierBy(tolua_S);  
  25.     extendBezierTo(tolua_S);  
  26.     extendDrawNode(tolua_S);  
  27.     extendSprite(tolua_S);  
  28.     extendLayerColor(tolua_S);  
  29.     extendLayerMultiplex(tolua_S);  
  30.     extendParticleSystem(tolua_S);  
  31.     extendFileUtils(tolua_S);  
  32.     extendUserDefault(tolua_S);  
  33.     extendGLProgram(tolua_S);  
  34.     extendTexture2D(tolua_S);  
  35.     extendSpriteBatchNode(tolua_S);  
  36.     extendEventListenerKeyboard(tolua_S);  
  37.     extendEventListenerTouchOneByOne(tolua_S);  
  38.     extendEventListenerTouchAllAtOnce(tolua_S);  
  39.     extendEventListenerMouse(tolua_S);  
  40.     extendEventListenerCustom(tolua_S);  
  41.     extendEventListenerAcceleration(tolua_S);  
  42.     extendActionCamera(tolua_S);  
  43.     extendGridAction(tolua_S);  
  44.       
  45.     extendMotionStreak(tolua_S);  
  46.     extendAtlasNode(tolua_S);  
  47.     extendParticleBatchNode(tolua_S);  
  48.     extendLabel(tolua_S);  
  49.     extendTMXTiledMap(tolua_S);  
  50.     extendConsole(tolua_S);  
  51.     extendGLProgramState(tolua_S);  
  52.     extendOrbitCamera(tolua_S);  
  53.     extendTMXLayer(tolua_S);  
  54.     extendApplication(tolua_S);  
  55.     extendTextureCache(tolua_S);  
  56.     extendGLView(tolua_S);  
  57.     extendCamera(tolua_S);  
  58.     return 0;  
  59. }  
  02,
  1. int lua_cocos2d_CardinalSplineTo_create(lua_State* tolua_S)  
  2. {  
  3.     if (NULL == tolua_S)  
  4.         return 0;  
  5.       
  6.     int argc = 0;  
  7.     bool ok = true;  
  8.       
  9. #if COCOS2D_DEBUG >= 1  
  10.     tolua_Error tolua_err;  
  11.     if (!tolua_isusertable(tolua_S,1,"cc.CardinalSplineTo",0,&tolua_err)) goto tolua_lerror;  
  12. #endif  
  13.       
  14.     argc = lua_gettop(tolua_S) - 1;  
  15.       
  16.     if (argc == 3)  
  17.     {  
  18.         double dur = 0.0;  
  19.         ok &= luaval_to_number(tolua_S, 2, &dur, "cc.CardinalSplineTo:create");  
  20.         if (!ok)  
  21.             return 0;  
  22.           
  23.         int num = 0;  
  24.         cocos2d::Vec2 *arr = NULL;  
  25.         ok &= luaval_to_array_of_vec2(tolua_S, 3, &arr, &num, "cc.CardinalSplineTo:create");  
  26.         if (!ok)  
  27.             return 0;  
  28.           
  29.         double ten = 0.0;  
  30.         ok &= luaval_to_number(tolua_S, 4, &ten, "cc.CardinalSplineTo:create");  
  31.         if (!ok)  
  32.         {  
  33.             CC_SAFE_DELETE_ARRAY(arr);  
  34.             return 0;  
  35.         }  
  36.           
  37.         if (num > 0)  
  38.         {  
  39.             PointArray* points = PointArray::create(num);  
  40.               
  41.             if (NULL == points)  
  42.             {  
  43.                 CC_SAFE_DELETE_ARRAY(arr);  
  44.                 return 0;  
  45.             }  
  46.               
  47.             forint i = 0; i < num; i++) {  
  48.                 points->addControlPoint(arr[i]);  
  49.             }  
  50.               
  51.             CC_SAFE_DELETE_ARRAY(arr);  
  52.             CardinalSplineTo* tolua_ret = CardinalSplineTo::create(dur, points, ten);  
  53.             if (NULL != tolua_ret)  
  54.             {  
  55.                 int nID = (tolua_ret) ? (int)tolua_ret->_ID : -1;  
  56.                 int* pLuaID = (tolua_ret) ? &tolua_ret->_luaID : NULL;  
  57.                 toluafix_pushusertype_ccobject(tolua_S, nID, pLuaID, (void*)tolua_ret,"cc.CardinalSplineTo");  
  58.                 return 1;  
  59.             }  
  60.         }  
  61.     }  
  62.       
  63.     luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d\n""cc.CardinalSplineTo:create", argc, 3);  
  64.     return 0;  
  65.       
  66. #if COCOS2D_DEBUG >= 1  
  67. tolua_lerror:  
  68.     tolua_error(tolua_S,"#ferror in function 'lua_cocos2d_CardinalSplineTo_create'.",&tolua_err);  
  69.     return 0;  
  70. #endif  
  71. }  

    03,

  1. static void extendCardinalSplineTo(lua_State* tolua_S)  
  2. {  
  3.     lua_pushstring(tolua_S,"cc.CardinalSplineTo");  
  4.     lua_rawget(tolua_S,LUA_REGISTRYINDEX);  
  5.     if (lua_istable(tolua_S,-1))  
  6.     {  
  7.         lua_pushstring(tolua_S,"create");  
  8.         lua_pushcfunction(tolua_S,lua_cocos2d_CardinalSplineTo_create);  
  9.         lua_rawset(tolua_S,-3);  
  10.     }  
  11.     lua_pop(tolua_S, 1);  
  12. }  
    1步骤加注释的那一行加在相应的位置,2和3都是直接添加到文件中。最后重新编译一下项目工程,在lua端就可以正常使用CardinalSplineTo方法了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值