LuaでC++メソッドを呼び出す

19181 ワード

現在のプロジェクトでは,Luaスクリプトが用いられているが,Luaの利点については後述しない.***
主にLuaでC++メソッドを呼び出す方法を説明します.
LuaがC++のブリッジを呼び出し、toluaです.toluaとは何ですか.http://blog.csdn.net/killwd/article/details/1423923 この文章は詳しく紹介されている.
手動で行う必要がありますが、実は中間クラスを作成することです.このクラスはtoluaによって直接使用され、最終的な目的はlua中のオブジェクトメソッドとC++中のオブジェクトメソッドの対応を実現することです.
 
LuaCocos 2 d.cppはすべての基本的なcocosオブジェクト法の変換を完了し,これを橋渡しと呼ぶ.LuaCocos 2 d.cppは、CCLuaStackのinit関数で呼び出されます.
 tolua_Cocos2d_open(m_state);

 
1.CLuaStackで中間ブリッジ(例えばLuaCocos 2 d)を呼び出す
2.橋梁の中(例えばLuaCocos 2 d)は様々な方法の転換を実現する
このように、全体の重点は橋梁の生成です.
LuaCocos 2 dを見て、一番大切な方法はtoluaだと思います.reg_types.
/* 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を例に挙げると、中で探せばわかります.1つ目のパラメータはまず気にしないで、2つ目はCCLabelTTFが呼び出したメソッド名で、3つ目のパラメータはこのファイルで定義されたメソッドで、見つけてみればわかります.
 
 #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で呼び出す必要がある場合は、この2つの大きなステップで完了すればよい.中間橋梁類はLuaCocos 2 d.cppを参考にすればよい.