quick-cocos2d-x 3.3 final 中cc.CardinalSplineTo:create匯出到lua

來源:互聯網
上載者:User

標籤:quick-cocos2d-x   lua   cocos2d-x   



         最近做的一個quick-cocos2d-x 3.3 final項目中使用到了曲線運動CardinalSpline,發現cc.CardinalSplineBy:create是可以使用的,但是cc.CardinalSplineTo:create卻是一個空值報錯,讓我感到有些疑惑,後來發現有朋友跟我的問題一樣,http://www.cocoachina.com/bbs/read.php?tid-273815.html,的確是cc.CardinalSplineTo:create沒有匯出給lua,但是它的實現都已經在c++端做好了。

如果我們要在模擬器上運行cc.CardinalSplineTo:create,那麼我們先找到 quick-3.3\cocos\scripting\lua-bindings\manual\cocos2d目錄下的lua_cocos2dx_manual.cpp檔案,開啟之後全域搜尋CardinalSplineTo,發現沒有搜尋到,但是CardinalSplineBy卻可以搜到,所以我們可以仿照CardinalSplineBy,將CardinalSplineTo匯出給lua端使用。下面共有三處需要添加修改:

1.

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;}

2.

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 >= 1tolua_lerror:    tolua_error(tolua_S,"#ferror in function 'lua_cocos2d_CardinalSplineTo_create'.",&tolua_err);    return 0;#endif}


3.

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都是直接添加到檔案中。

現在我們開啟  quick-3.3\quick\player\proj.win32\player.sln檔案,產生項目,進行編譯,就可以發現我們的player中CardinalSplineTo不再是控制了。

如果要在android上編包運行,那麼我們可以在當前項目下的 \frameworks\cocos2d-x\cocos\scripting\lua-bindings\manual\cocos2d目錄中開啟lua_cocos2dx_manual.cpp檔案,按照之前的三個步驟進行修改添加,然後重新編譯,運行build_native.bat,打包在手機上即可。




quick-cocos2d-x 3.3 final 中cc.CardinalSplineTo:create匯出到lua

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.