感谢原作者的心情劳作:
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添加进相应的导出方法:
- int register_all_cocos2dx_manual(lua_State* tolua_S)
- {
- if (NULL == tolua_S)
- return 0;
- extendNode(tolua_S);
- extendScene(tolua_S);
- extendLayer(tolua_S);
- extendMenuItem(tolua_S);
- extendMenuItemImage(tolua_S);
- extendMenuItemLabel(tolua_S);
- extendMenuItemFont(tolua_S);
- extendMenuItemSprite(tolua_S);
- extendMenuItemToggle(tolua_S);
- extendMenu(tolua_S);
- extendScheduler(tolua_S);
- extendSequence(tolua_S);
- extendCallFunc(tolua_S);
- extendSpawn(tolua_S);
- extendCardinalSplineBy(tolua_S);
- extendCardinalSplineTo(tolua_S); //这一行是添加进去的
- extendCatmullRomBy(tolua_S);
- extendCatmullRomTo(tolua_S);
- extendBezierBy(tolua_S);
- extendBezierTo(tolua_S);
- extendDrawNode(tolua_S);
- extendSprite(tolua_S);
- extendLayerColor(tolua_S);
- extendLayerMultiplex(tolua_S);
- extendParticleSystem(tolua_S);
- extendFileUtils(tolua_S);
- extendUserDefault(tolua_S);
- extendGLProgram(tolua_S);
- extendTexture2D(tolua_S);
- extendSpriteBatchNode(tolua_S);
- extendEventListenerKeyboard(tolua_S);
- extendEventListenerTouchOneByOne(tolua_S);
- extendEventListenerTouchAllAtOnce(tolua_S);
- extendEventListenerMouse(tolua_S);
- extendEventListenerCustom(tolua_S);
- extendEventListenerAcceleration(tolua_S);
- extendActionCamera(tolua_S);
- extendGridAction(tolua_S);
- extendMotionStreak(tolua_S);
- extendAtlasNode(tolua_S);
- extendParticleBatchNode(tolua_S);
- extendLabel(tolua_S);
- extendTMXTiledMap(tolua_S);
- extendConsole(tolua_S);
- extendGLProgramState(tolua_S);
- extendOrbitCamera(tolua_S);
- extendTMXLayer(tolua_S);
- extendApplication(tolua_S);
- extendTextureCache(tolua_S);
- extendGLView(tolua_S);
- extendCamera(tolua_S);
- return 0;
- }
- int lua_cocos2d_CardinalSplineTo_create(lua_State* tolua_S)
- {
- if (NULL == tolua_S)
- return 0;
- int argc = 0;
- bool ok = true;
- #if COCOS2D_DEBUG >= 1
- tolua_Error tolua_err;
- if (!tolua_isusertable(tolua_S,1,"cc.CardinalSplineTo",0,&tolua_err)) goto tolua_lerror;
- #endif
- argc = lua_gettop(tolua_S) - 1;
- if (argc == 3)
- {
- double dur = 0.0;
- ok &= luaval_to_number(tolua_S, 2, &dur, "cc.CardinalSplineTo:create");
- if (!ok)
- return 0;
- int num = 0;
- cocos2d::Vec2 *arr = NULL;
- ok &= luaval_to_array_of_vec2(tolua_S, 3, &arr, &num, "cc.CardinalSplineTo:create");
- if (!ok)
- return 0;
- double ten = 0.0;
- ok &= luaval_to_number(tolua_S, 4, &ten, "cc.CardinalSplineTo:create");
- if (!ok)
- {
- CC_SAFE_DELETE_ARRAY(arr);
- return 0;
- }
- if (num > 0)
- {
- PointArray* points = PointArray::create(num);
- if (NULL == points)
- {
- CC_SAFE_DELETE_ARRAY(arr);
- return 0;
- }
- for( int i = 0; i < num; i++) {
- points->addControlPoint(arr[i]);
- }
- CC_SAFE_DELETE_ARRAY(arr);
- CardinalSplineTo* tolua_ret = CardinalSplineTo::create(dur, points, ten);
- if (NULL != tolua_ret)
- {
- int nID = (tolua_ret) ? (int)tolua_ret->_ID : -1;
- int* pLuaID = (tolua_ret) ? &tolua_ret->_luaID : NULL;
- toluafix_pushusertype_ccobject(tolua_S, nID, pLuaID, (void*)tolua_ret,"cc.CardinalSplineTo");
- return 1;
- }
- }
- }
- luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d\n", "cc.CardinalSplineTo:create", argc, 3);
- return 0;
- #if COCOS2D_DEBUG >= 1
- tolua_lerror:
- tolua_error(tolua_S,"#ferror in function 'lua_cocos2d_CardinalSplineTo_create'.",&tolua_err);
- return 0;
- #endif
- }
03,
- static void extendCardinalSplineTo(lua_State* tolua_S)
- {
- lua_pushstring(tolua_S,"cc.CardinalSplineTo");
- lua_rawget(tolua_S,LUA_REGISTRYINDEX);
- if (lua_istable(tolua_S,-1))
- {
- lua_pushstring(tolua_S,"create");
- lua_pushcfunction(tolua_S,lua_cocos2d_CardinalSplineTo_create);
- lua_rawset(tolua_S,-3);
- }
- lua_pop(tolua_S, 1);
- }
1步骤加注释的那一行加在相应的位置,2和3都是直接添加到文件中。最后重新编译一下项目工程,在lua端就可以正常使用CardinalSplineTo方法了。