Lua中調用C++方法

目前項目,使用了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便可。

相關文章
相關標籤/搜索