目前项目,使用了Lua脚本,至于使用Lua的好处不再赘述了。于是对Tolua做了一些小小的学习,总结一下吧。
主要说一下如何在Lua中调用C++方法。
Lua调用C++的桥梁,是tolua。tolua是什么,http://blog.csdn.net/killwd/article/details/1423923 这篇文章介绍的很详细。
我们需要手动做的,其实便是编写中间类,这个类被tolua直接使用,最终的目的是实现lua中对象方法和C++中对象方法的对应。
LuaCocos2d.cpp 完成了所有基本的cocos对象方法的转换,我们把它称之为一个桥梁。LuaCocos2d.cpp 是在CCLuaStack 中的init函数中调用的。
|
1 |
tolua_Cocos2d_open(m_state); |
1.CCLuaStack 中调用中间桥梁(比如LuaCocos2d)
2.桥梁里面(比如LuaCocos2d)实现各种方法的转换
这样,整个的重点就是桥梁的生成了。
看一下LuaCocos2d ,最重要的方法我认为是tolua_reg_types。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291 |
/* 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在C++中的方法名,第三个参数便是这个文件中定义的方法,你找到一看便会明白了。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 |
#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即可。
原文:http://www.cnblogs.com/lan0725/p/3539762.html