目前項目,使用了Lua腳本,至於使用Lua的好處再也不贅述了。因而對Tolua作了一些小小的學習,總結一下吧。ide
主要說一下如何在Lua中調用C++方法。函數
Lua調用C++的橋樑,是tolua。tolua是什麼,http://blog.csdn.net/killwd/article/details/1423923 這篇文章介紹的很詳細。學習
咱們須要手動作的,其實即是編寫中間類,這個類被tolua直接使用,最終的目的是實現lua中對象方法和C++中對象方法的對應。ui
LuaCocos2d.cpp 完成了全部基本的cocos對象方法的轉換,咱們把它稱之爲一個橋樑。LuaCocos2d.cpp 是在CCLuaStack 中的init函數中調用的。lua
tolua_Cocos2d_open(m_state);
1.CCLuaStack 中調用中間橋樑(好比LuaCocos2d)spa
2.橋樑裏面(好比LuaCocos2d)實現各類方法的轉換.net
這樣,整個的重點就是橋樑的生成了。對象
看一下LuaCocos2d ,最重要的方法我認爲是tolua_reg_types。blog
/* function to register type */ static void tolua_reg_types (lua_State* tolua_S) { tolua_usertype(tolua_S,"CCTransitionProgressOutIn"); tolua_usertype(tolua_S,"CCControlSaturationBrightnessPicker"); tolua_usertype(tolua_S,"CCShaky3D"); tolua_usertype(tolua_S,"CCTransitionTurnOffTiles"); tolua_usertype(tolua_S,"CCTransitionShrinkGrow"); tolua_usertype(tolua_S,"CCFadeOutBLTiles"); tolua_usertype(tolua_S,"CCProgressFromTo"); tolua_usertype(tolua_S,"CCActionCamera"); tolua_usertype(tolua_S,"CCFlipY3D"); tolua_usertype(tolua_S,"CCLinkPosition"); tolua_usertype(tolua_S,"CCEaseExponentialIn"); tolua_usertype(tolua_S,"CCApplication"); tolua_usertype(tolua_S,"CCControlHuePicker"); tolua_usertype(tolua_S,"CCScaleTo"); tolua_usertype(tolua_S,"CCTransitionFlipAngular"); tolua_usertype(tolua_S,"CCEaseElasticOut"); tolua_usertype(tolua_S,"CCAccelDeccelAmplitude"); tolua_usertype(tolua_S,"CCDisplayData"); tolua_usertype(tolua_S,"CCParticleRain"); tolua_usertype(tolua_S,"CCTransitionSlideInB"); tolua_usertype(tolua_S,"CCKeypadDispatcher"); tolua_usertype(tolua_S,"CCDelayTime"); tolua_usertype(tolua_S,"CCOrbitCamera"); tolua_usertype(tolua_S,"CCLabelTTF"); tolua_usertype(tolua_S,"CCScale9Sprite"); tolua_usertype(tolua_S,"CCMoveTo"); tolua_usertype(tolua_S,"CCTransitionSplitRows"); tolua_usertype(tolua_S,"CCFollow"); tolua_usertype(tolua_S,"CCMovementData"); tolua_usertype(tolua_S,"CCBlink"); tolua_usertype(tolua_S,"CCTexture2D"); tolua_usertype(tolua_S,"CCTouch"); tolua_usertype(tolua_S,"CCParticleSystemQuad"); tolua_usertype(tolua_S,"CCTransitionMoveInB"); tolua_usertype(tolua_S,"CCToggleVisibility"); tolua_usertype(tolua_S,"cc_timeval"); tolua_usertype(tolua_S,"CCTMXTilesetInfo"); tolua_usertype(tolua_S,"CCParticleSun"); tolua_usertype(tolua_S,"CCScene"); tolua_usertype(tolua_S,"CCArmatureDataManager"); tolua_usertype(tolua_S,"CCFadeIn"); tolua_usertype(tolua_S,"CCTransitionFadeDown"); tolua_usertype(tolua_S,"CCWavesTiles3D"); tolua_usertype(tolua_S,"CCFadeOutDownTiles"); tolua_usertype(tolua_S,"CCComponentContainer"); tolua_usertype(tolua_S,"CCTMXTiledMap"); tolua_usertype(tolua_S,"CCCardinalSplineBy"); tolua_usertype(tolua_S,"CCTransitionZoomFlipAngular"); tolua_usertype(tolua_S,"CCFlipY"); tolua_usertype(tolua_S,"CCProgressTo"); tolua_usertype(tolua_S,"CCReuseGrid"); tolua_usertype(tolua_S,"CCShow"); tolua_usertype(tolua_S,"CCEaseRateAction"); tolua_usertype(tolua_S,"CCEaseBackIn"); tolua_usertype(tolua_S,"CCTransitionScene"); tolua_usertype(tolua_S,"CCGridAction"); tolua_usertype(tolua_S,"CCFiniteTimeAction"); tolua_usertype(tolua_S,"CCSpriteFrameCache"); tolua_usertype(tolua_S,"CCMotionStreak"); tolua_usertype(tolua_S,"CCAnimate"); tolua_usertype(tolua_S,"CCTiledGrid3DAction"); tolua_usertype(tolua_S,"CCPointArray"); tolua_usertype(tolua_S,"CCTransitionProgressHorizontal"); tolua_usertype(tolua_S,"CCRectShape"); tolua_usertype(tolua_S,"ccColor3B"); tolua_usertype(tolua_S,"CCTextureCache"); tolua_usertype(tolua_S,"CCDevice"); tolua_usertype(tolua_S,"CCFadeOutTRTiles"); tolua_usertype(tolua_S,"CCMenuItemSprite"); tolua_usertype(tolua_S,"CCEaseExponentialInOut"); tolua_usertype(tolua_S,"CCFadeOutUpTiles"); tolua_usertype(tolua_S,"CCWaves3D"); tolua_usertype(tolua_S,"ccBlendFunc"); tolua_usertype(tolua_S,"CCImage"); tolua_usertype(tolua_S,"CCLens3D"); tolua_usertype(tolua_S,"CCTintBy"); tolua_usertype(tolua_S,"CCBool"); tolua_usertype(tolua_S,"CCPoint"); tolua_usertype(tolua_S,"CCParticleMeteor"); tolua_usertype(tolua_S,"CCEaseElasticIn"); tolua_usertype(tolua_S,"CCEaseSineIn"); tolua_usertype(tolua_S,"CCCardinalSplineTo"); tolua_usertype(tolua_S,"CCFloat"); tolua_usertype(tolua_S,"CCWaves"); tolua_usertype(tolua_S,"CCParticleFireworks"); tolua_usertype(tolua_S,"CCEvent"); tolua_usertype(tolua_S,"CCBaseData"); tolua_usertype(tolua_S,"CCActionInterval"); tolua_usertype(tolua_S,"CCRenderTexture"); tolua_usertype(tolua_S,"CCObject"); tolua_usertype(tolua_S,"CCEaseBackInOut"); tolua_usertype(tolua_S,"CCAtlasNode"); tolua_usertype(tolua_S,"CCEaseBackOut"); tolua_usertype(tolua_S,"CCSize"); tolua_usertype(tolua_S,"CCInteger"); tolua_usertype(tolua_S,"CCParticleFlower"); tolua_usertype(tolua_S,"CCLiquid"); tolua_usertype(tolua_S,"CCEaseBounce"); tolua_usertype(tolua_S,"CCSpeed"); tolua_usertype(tolua_S,"CCFrameData"); tolua_usertype(tolua_S,"CCTransitionMoveInL"); tolua_usertype(tolua_S,"CCSpriteFrame"); tolua_usertype(tolua_S,"CCJumpBy"); tolua_usertype(tolua_S,"CCTransitionFadeTR"); tolua_usertype(tolua_S,"CCControlUtils"); tolua_usertype(tolua_S,"CCGridBase"); tolua_usertype(tolua_S,"RGBA"); tolua_usertype(tolua_S,"CCParticleDisplayData"); tolua_usertype(tolua_S,"SimpleAudioEngine"); tolua_usertype(tolua_S,"CCNotificationCenter"); tolua_usertype(tolua_S,"CCPointShape"); tolua_usertype(tolua_S,"CCSpriteBatchNode"); tolua_usertype(tolua_S,"CCEaseSineInOut"); tolua_usertype(tolua_S,"ccFontShadow"); tolua_usertype(tolua_S,"CCTwirl"); tolua_usertype(tolua_S,"CCCircleShape"); tolua_usertype(tolua_S,"CCDrawNode"); tolua_usertype(tolua_S,"CCControlColourPicker"); tolua_usertype(tolua_S,"CCMenuItemLabel"); tolua_usertype(tolua_S,"CCDouble"); tolua_usertype(tolua_S,"CCTargetedAction"); tolua_usertype(tolua_S,"CCGrid3DAction"); tolua_usertype(tolua_S,"CCString"); tolua_usertype(tolua_S,"CCRemoveSelf"); tolua_usertype(tolua_S,"CCAnimationData"); tolua_usertype(tolua_S,"CCTransitionMoveInR"); tolua_usertype(tolua_S,"CCTransitionFade"); tolua_usertype(tolua_S,"CCSkewBy"); tolua_usertype(tolua_S,"CCFlipX"); tolua_usertype(tolua_S,"CCActionManager"); tolua_usertype(tolua_S,"CCTransitionSlideInT"); tolua_usertype(tolua_S,"CCCatmullRomTo"); tolua_usertype(tolua_S,"CCPolygonShape"); tolua_usertype(tolua_S,"CCTransitionSceneOriented"); tolua_usertype(tolua_S,"CCAnimationCache"); tolua_usertype(tolua_S,"CCComponent"); tolua_usertype(tolua_S,"CCTransitionSlideInR"); tolua_usertype(tolua_S,"CCTransitionMoveInT"); tolua_usertype(tolua_S,"CCLayerGradient"); tolua_usertype(tolua_S,"CCShapeNode"); tolua_usertype(tolua_S,"CCStopGrid"); tolua_usertype(tolua_S,"CCTMXMapInfo"); tolua_usertype(tolua_S,"CCConfiguration"); tolua_usertype(tolua_S,"CCLayerColor"); tolua_usertype(tolua_S,"CCMenuItemFont"); tolua_usertype(tolua_S,"CCTransitionFadeUp"); tolua_usertype(tolua_S,"CCTransitionProgressVertical"); tolua_usertype(tolua_S,"CCAccelerometer"); tolua_usertype(tolua_S,"CCProcessBase"); tolua_usertype(tolua_S,"CCRect"); tolua_usertype(tolua_S,"CCActionInstant"); tolua_usertype(tolua_S,"CCTurnOffTiles"); tolua_usertype(tolua_S,"CCParticleSnow"); tolua_usertype(tolua_S,"CCMenuItemImage"); tolua_usertype(tolua_S,"ccTexParams"); tolua_usertype(tolua_S,"CCEaseSineOut"); tolua_usertype(tolua_S,"CCCallFuncN"); tolua_usertype(tolua_S,"CCTransitionPageTurn"); tolua_usertype(tolua_S,"ccFontDefinition"); tolua_usertype(tolua_S,"ccFontStroke"); tolua_usertype(tolua_S,"CCTintTo"); tolua_usertype(tolua_S,"CCTransitionCrossFade"); tolua_usertype(tolua_S,"CCClippingRegionNode"); tolua_usertype(tolua_S,"CCActionEase"); tolua_usertype(tolua_S,"CCBone"); tolua_usertype(tolua_S,"CCParallaxNode"); tolua_usertype(tolua_S,"CCRotateTo"); tolua_usertype(tolua_S,"CCArmature"); tolua_usertype(tolua_S,"CCBatchNode"); tolua_usertype(tolua_S,"CCMovementBoneData"); tolua_usertype(tolua_S,"CCShakyTiles3D"); tolua_usertype(tolua_S,"CCArmatureDisplayData"); tolua_usertype(tolua_S,"CCNode"); tolua_usertype(tolua_S,"CCArmatureData"); tolua_usertype(tolua_S,"CCArmatureAnimation"); tolua_usertype(tolua_S,"CCSpriteDisplayData"); tolua_usertype(tolua_S,"CCBezierTo"); tolua_usertype(tolua_S,"CCDeccelAmplitude"); tolua_usertype(tolua_S,"CCTweenType"); tolua_usertype(tolua_S,"CCBoneData"); tolua_usertype(tolua_S,"CCTableView"); tolua_usertype(tolua_S,"CCTableViewCell"); tolua_usertype(tolua_S,"CCTransitionProgress"); tolua_usertype(tolua_S,"CCEditBox"); tolua_usertype(tolua_S,"HSV"); tolua_usertype(tolua_S,"CCRotateBy"); tolua_usertype(tolua_S,"CCControlStepper"); tolua_usertype(tolua_S,"CCControlSlider"); tolua_usertype(tolua_S,"CCMoveBy"); tolua_usertype(tolua_S,"CCParticleGalaxy"); tolua_usertype(tolua_S,"CCCamera"); tolua_usertype(tolua_S,"CCSequence"); tolua_usertype(tolua_S,"CCTileMapAtlas"); tolua_usertype(tolua_S,"tCCParticle"); tolua_usertype(tolua_S,"CCCatmullRomBy"); tolua_usertype(tolua_S,"CCHide"); tolua_usertype(tolua_S,"CCControlButton"); tolua_usertype(tolua_S,"CCJumpTiles3D"); tolua_usertype(tolua_S,"CCTransitionJumpZoom"); tolua_usertype(tolua_S,"CCTMXLayer"); tolua_usertype(tolua_S,"CCControl"); tolua_usertype(tolua_S,"AssetsManager"); tolua_usertype(tolua_S,"CCScheduler"); tolua_usertype(tolua_S,"CCDirector"); tolua_usertype(tolua_S,"CCMenuItemToggle"); tolua_usertype(tolua_S,"CCEGLView"); tolua_usertype(tolua_S,"ccBezierConfig"); tolua_usertype(tolua_S,"CCFadeTo"); tolua_usertype(tolua_S,"CCTouchDispatcher"); tolua_usertype(tolua_S,"CCMenuItemAtlasFont"); tolua_usertype(tolua_S,"SEL_MenuHandler"); tolua_usertype(tolua_S,"CCEventDispatcher"); tolua_usertype(tolua_S,"CCParticleSystem"); tolua_usertype(tolua_S,"CCJumpTo"); tolua_usertype(tolua_S,"CCMenu"); tolua_usertype(tolua_S,"ccColor4F"); tolua_usertype(tolua_S,"CCEaseExponentialOut"); tolua_usertype(tolua_S,"CCSet"); tolua_usertype(tolua_S,"CCCallFunc"); tolua_usertype(tolua_S,"CCLabelAtlas"); tolua_usertype(tolua_S,"CCLabelBMFont"); tolua_usertype(tolua_S,"CCEaseBounceIn"); tolua_usertype(tolua_S,"CCPlace"); tolua_usertype(tolua_S,"CCSprite"); tolua_usertype(tolua_S,"CCFileUtils"); tolua_usertype(tolua_S,"CCLayer"); tolua_usertype(tolua_S,"CCTransitionSplitCols"); tolua_usertype(tolua_S,"CCPageTurn3D"); tolua_usertype(tolua_S,"CCEaseIn"); tolua_usertype(tolua_S,"CCTransitionProgressRadialCW"); tolua_usertype(tolua_S,"CCEaseElastic"); tolua_usertype(tolua_S,"CCTransitionProgressRadialCCW"); tolua_usertype(tolua_S,"CCEaseOut"); tolua_usertype(tolua_S,"CCBezierBy"); tolua_usertype(tolua_S,"CCScrollView"); tolua_usertype(tolua_S,"CCUserDefault"); tolua_usertype(tolua_S,"CCProgressTimer"); tolua_usertype(tolua_S,"CCDictionary"); tolua_usertype(tolua_S,"CCParticleFire"); tolua_usertype(tolua_S,"CCTransitionFlipY"); tolua_usertype(tolua_S,"CCTMXLayerInfo"); tolua_usertype(tolua_S,"CCTransitionFadeBL"); tolua_usertype(tolua_S,"CCShuffleTiles"); tolua_usertype(tolua_S,"CCTransitionSlideInL"); tolua_usertype(tolua_S,"CCRipple3D"); tolua_usertype(tolua_S,"CCRepeat"); tolua_usertype(tolua_S,"CCClippingNode"); tolua_usertype(tolua_S,"CCTransitionProgressInOut"); tolua_usertype(tolua_S,"CCParticleSpiral"); tolua_usertype(tolua_S,"CCTransitionZoomFlipY"); tolua_usertype(tolua_S,"CCEaseBounceInOut"); tolua_usertype(tolua_S,"CCTransitionZoomFlipX"); tolua_usertype(tolua_S,"CCTransitionFlipX"); tolua_usertype(tolua_S,"CCSpawn"); tolua_usertype(tolua_S,"CCTransitionRotoZoom"); tolua_usertype(tolua_S,"CCEaseInOut"); tolua_usertype(tolua_S,"CCShatteredTiles3D"); tolua_usertype(tolua_S,"CCAccelAmplitude"); tolua_usertype(tolua_S,"CCParticleSmoke"); tolua_usertype(tolua_S,"CCTMXObjectGroup"); tolua_usertype(tolua_S,"CCFadeOut"); tolua_usertype(tolua_S,"CCLayerMultiplex"); tolua_usertype(tolua_S,"CCControlPotentiometer"); tolua_usertype(tolua_S,"CCParticleExplosion"); tolua_usertype(tolua_S,"CCGLProgram"); tolua_usertype(tolua_S,"CCMenuItem"); tolua_usertype(tolua_S,"ccColor4B"); tolua_usertype(tolua_S,"CCFlipX3D"); tolua_usertype(tolua_S,"CCSplitRows"); tolua_usertype(tolua_S,"CCArray"); tolua_usertype(tolua_S,"CCReverseTime"); tolua_usertype(tolua_S,"CCSkewTo"); tolua_usertype(tolua_S,"CCParticleBatchNode"); tolua_usertype(tolua_S,"CCGraySprite"); tolua_usertype(tolua_S,"CCAnimation"); tolua_usertype(tolua_S,"CCRepeatForever"); tolua_usertype(tolua_S,"CCTime"); tolua_usertype(tolua_S,"CCAction"); tolua_usertype(tolua_S,"CCTextFieldTTF"); tolua_usertype(tolua_S,"CCTextureAtlas"); tolua_usertype(tolua_S,"CCScaleBy"); tolua_usertype(tolua_S,"CCEaseElasticInOut"); tolua_usertype(tolua_S,"CCSplitCols"); tolua_usertype(tolua_S,"CCEaseBounceOut"); tolua_usertype(tolua_S,"CCAnimationFrame"); tolua_usertype(tolua_S,"CCControlSwitch"); }
拿CCLabelTTF舉例,你在裏面搜即可以明白了。第一個參數先不用管,第二個是CCLabelTTF在調用的方法名,第三個參數即是這個文件中定義的方法,你找到一看便會明白了。ip
#ifdef __cplusplus tolua_cclass(tolua_S,"CCLabelTTF","CCLabelTTF","CCSprite",tolua_collect_CCLabelTTF); #else tolua_cclass(tolua_S,"CCLabelTTF","CCLabelTTF","CCSprite",NULL); #endif tolua_beginmodule(tolua_S,"CCLabelTTF"); tolua_function(tolua_S,"new",tolua_Cocos2d_CCLabelTTF_new00); tolua_function(tolua_S,"new_local",tolua_Cocos2d_CCLabelTTF_new00_local); tolua_function(tolua_S,".call",tolua_Cocos2d_CCLabelTTF_new00_local); tolua_function(tolua_S,"delete",tolua_Cocos2d_CCLabelTTF_delete00); tolua_function(tolua_S,"create",tolua_Cocos2d_CCLabelTTF_create00); tolua_function(tolua_S,"create",tolua_Cocos2d_CCLabelTTF_create01); tolua_function(tolua_S,"create",tolua_Cocos2d_CCLabelTTF_create02); tolua_function(tolua_S,"create",tolua_Cocos2d_CCLabelTTF_create03); tolua_function(tolua_S,"initWithString",tolua_Cocos2d_CCLabelTTF_initWithString00); tolua_function(tolua_S,"initWithString",tolua_Cocos2d_CCLabelTTF_initWithString01); tolua_function(tolua_S,"initWithString",tolua_Cocos2d_CCLabelTTF_initWithString02); tolua_function(tolua_S,"initWithStringAndTextDefinition",tolua_Cocos2d_CCLabelTTF_initWithStringAndTextDefinition00); tolua_function(tolua_S,"init",tolua_Cocos2d_CCLabelTTF_init00); tolua_function(tolua_S,"setTextDefinition",tolua_Cocos2d_CCLabelTTF_setTextDefinition00); tolua_function(tolua_S,"getTextDefinition",tolua_Cocos2d_CCLabelTTF_getTextDefinition00); tolua_function(tolua_S,"enableShadow",tolua_Cocos2d_CCLabelTTF_enableShadow00); tolua_function(tolua_S,"disableShadow",tolua_Cocos2d_CCLabelTTF_disableShadow00); tolua_function(tolua_S,"enableStroke",tolua_Cocos2d_CCLabelTTF_enableStroke00); tolua_function(tolua_S,"disableStroke",tolua_Cocos2d_CCLabelTTF_disableStroke00); tolua_function(tolua_S,"setFontFillColor",tolua_Cocos2d_CCLabelTTF_setFontFillColor00); tolua_function(tolua_S,"setString",tolua_Cocos2d_CCLabelTTF_setString00); tolua_function(tolua_S,"getString",tolua_Cocos2d_CCLabelTTF_getString00); tolua_function(tolua_S,"getHorizontalAlignment",tolua_Cocos2d_CCLabelTTF_getHorizontalAlignment00); tolua_function(tolua_S,"setHorizontalAlignment",tolua_Cocos2d_CCLabelTTF_setHorizontalAlignment00); tolua_function(tolua_S,"getVerticalAlignment",tolua_Cocos2d_CCLabelTTF_getVerticalAlignment00); tolua_function(tolua_S,"setVerticalAlignment",tolua_Cocos2d_CCLabelTTF_setVerticalAlignment00); tolua_function(tolua_S,"getDimensions",tolua_Cocos2d_CCLabelTTF_getDimensions00); tolua_function(tolua_S,"setDimensions",tolua_Cocos2d_CCLabelTTF_setDimensions00); tolua_function(tolua_S,"getFontSize",tolua_Cocos2d_CCLabelTTF_getFontSize00); tolua_function(tolua_S,"setFontSize",tolua_Cocos2d_CCLabelTTF_setFontSize00); tolua_function(tolua_S,"getFontName",tolua_Cocos2d_CCLabelTTF_getFontName00); tolua_function(tolua_S,"setFontName",tolua_Cocos2d_CCLabelTTF_setFontName00); tolua_endmodule(tolua_S);
假如咱們有本身的C++方法須要在Lua中調用,也按照這兩個大步驟完成便可。中間橋樑類參考LuaCocos2d.cpp便可。