日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【cocos2d-x从c++到js】14:注册函数

發布時間:2025/3/17 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【cocos2d-x从c++到js】14:注册函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前面的文章中講過,在游戲啟動時,會調用大量的addRegisterCallback函數,向SpiderMonkey注冊Cocos2d-x引擎的函數。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ScriptingCore* sc = ScriptingCore::getInstance(); sc->addRegisterCallback(register_all_cocos2dx); sc->addRegisterCallback(register_all_cocos2dx_extension); sc->addRegisterCallback(register_cocos2dx_js_extensions); sc->addRegisterCallback(register_all_cocos2dx_extension_manual); sc->addRegisterCallback(jsb_register_chipmunk); sc->addRegisterCallback(JSB_register_opengl); sc->addRegisterCallback(jsb_register_system); sc->addRegisterCallback(MinXmlHttpRequest::_js_register); sc->addRegisterCallback(register_jsb_websocket); sc->addRegisterCallback(register_all_cocos2dx_builder); sc->addRegisterCallback(register_CCBuilderReader); sc->addRegisterCallback(register_all_cocos2dx_gui); sc->addRegisterCallback(register_all_cocos2dx_gui_manual); sc->addRegisterCallback(register_all_cocos2dx_studio); sc->addRegisterCallback(register_all_cocos2dx_studio_manual); sc->addRegisterCallback(register_all_cocos2dx_spine); sc->start();


以register_all_cocos2dx注冊函數為例,跳轉到實現代碼:

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 void?register_all_cocos2dx(JSContext* cx, JSObject* obj) { ????// first, try to get the ns ????JS::RootedValue nsval(cx); ????JSObject *ns; ????JS_GetProperty(cx, obj,?"cc", &nsval); ????if?(nsval == JSVAL_VOID) { ????????ns = JS_NewObject(cx, NULL, NULL, NULL); ????????nsval = OBJECT_TO_JSVAL(ns); ????????JS_SetProperty(cx, obj,?"cc", nsval); ????}?else?{ ????????JS_ValueToObject(cx, nsval, &ns); ????} ????obj = ns; ????js_register_cocos2dx_Action(cx, obj); ????js_register_cocos2dx_FiniteTimeAction(cx, obj); ????js_register_cocos2dx_ActionInstant(cx, obj); ????js_register_cocos2dx_Hide(cx, obj); ????js_register_cocos2dx_Node(cx, obj); ????js_register_cocos2dx_Scene(cx, obj); ????js_register_cocos2dx_TransitionScene(cx, obj); ????js_register_cocos2dx_TransitionEaseScene(cx, obj); ????js_register_cocos2dx_TransitionMoveInL(cx, obj); ????js_register_cocos2dx_TransitionMoveInB(cx, obj); ????js_register_cocos2dx_Layer(cx, obj); ????js_register_cocos2dx___LayerRGBA(cx, obj); ????js_register_cocos2dx_AtlasNode(cx, obj); ????js_register_cocos2dx_TileMapAtlas(cx, obj); ????js_register_cocos2dx_TransitionMoveInT(cx, obj); ????js_register_cocos2dx_TransitionMoveInR(cx, obj); ????js_register_cocos2dx_ParticleSystem(cx, obj); ????js_register_cocos2dx_ParticleSystemQuad(cx, obj); ????js_register_cocos2dx_ParticleSnow(cx, obj); ????js_register_cocos2dx_ActionInterval(cx, obj); ????js_register_cocos2dx_ActionCamera(cx, obj); ????js_register_cocos2dx_ProgressFromTo(cx, obj); ????js_register_cocos2dx_MoveBy(cx, obj); ????js_register_cocos2dx_MoveTo(cx, obj); ????js_register_cocos2dx_JumpBy(cx, obj); ????js_register_cocos2dx_ActionEase(cx, obj); ????js_register_cocos2dx_EaseBounce(cx, obj); ????js_register_cocos2dx_EaseBounceIn(cx, obj); ????js_register_cocos2dx_TransitionRotoZoom(cx, obj); ????js_register_cocos2dx_Director(cx, obj); ????js_register_cocos2dx_Texture2D(cx, obj); ????js_register_cocos2dx_EaseElastic(cx, obj); ????js_register_cocos2dx_EaseElasticOut(cx, obj); ????js_register_cocos2dx_EaseBackOut(cx, obj); ????js_register_cocos2dx_TransitionSceneOriented(cx, obj); ????js_register_cocos2dx_TransitionFlipX(cx, obj); ????js_register_cocos2dx_Spawn(cx, obj); ????js_register_cocos2dx_SimpleAudioEngine(cx, obj); ????js_register_cocos2dx_SkewTo(cx, obj); ????js_register_cocos2dx_SkewBy(cx, obj); ????js_register_cocos2dx_TransitionProgress(cx, obj); ????js_register_cocos2dx_TransitionProgressVertical(cx, obj); ????js_register_cocos2dx_TMXTiledMap(cx, obj); ????js_register_cocos2dx_GridAction(cx, obj); ????js_register_cocos2dx_Grid3DAction(cx, obj); ????js_register_cocos2dx_FadeIn(cx, obj); ????js_register_cocos2dx_AnimationCache(cx, obj); ????js_register_cocos2dx_FlipX3D(cx, obj); ????js_register_cocos2dx_FlipY3D(cx, obj); ????js_register_cocos2dx_EaseSineInOut(cx, obj); ????js_register_cocos2dx_TransitionFlipAngular(cx, obj); ????js_register_cocos2dx_EGLViewProtocol(cx, obj); ????js_register_cocos2dx_EGLView(cx, obj); ????js_register_cocos2dx_EaseElasticInOut(cx, obj); ????js_register_cocos2dx_Show(cx, obj); ????js_register_cocos2dx_FadeOut(cx, obj); ????js_register_cocos2dx_CallFunc(cx, obj); ????js_register_cocos2dx_Waves3D(cx, obj); ????js_register_cocos2dx_ParticleFireworks(cx, obj); ????js_register_cocos2dx_MenuItem(cx, obj); ????js_register_cocos2dx_MenuItemSprite(cx, obj); ????js_register_cocos2dx_MenuItemImage(cx, obj); ????js_register_cocos2dx_ParticleFire(cx, obj); ????js_register_cocos2dx_TransitionZoomFlipAngular(cx, obj); ????js_register_cocos2dx_EaseRateAction(cx, obj); ????js_register_cocos2dx_EaseIn(cx, obj); ????js_register_cocos2dx_EaseExponentialInOut(cx, obj); ????js_register_cocos2dx_EaseBackInOut(cx, obj); ????js_register_cocos2dx_EaseExponentialOut(cx, obj); ????js_register_cocos2dx_SpriteBatchNode(cx, obj); ????js_register_cocos2dx_Label(cx, obj); ????js_register_cocos2dx_Application(cx, obj); ????js_register_cocos2dx_DelayTime(cx, obj); ????js_register_cocos2dx_LabelAtlas(cx, obj); ????js_register_cocos2dx_LabelBMFont(cx, obj); ????js_register_cocos2dx_TransitionFadeTR(cx, obj); ????js_register_cocos2dx_TransitionFadeBL(cx, obj); ????js_register_cocos2dx_EaseElasticIn(cx, obj); ????js_register_cocos2dx_ParticleSpiral(cx, obj); ????js_register_cocos2dx_TiledGrid3DAction(cx, obj); ????js_register_cocos2dx_FadeOutTRTiles(cx, obj); ????js_register_cocos2dx_FadeOutUpTiles(cx, obj); ????js_register_cocos2dx_FadeOutDownTiles(cx, obj); ????js_register_cocos2dx_TextureCache(cx, obj); ????js_register_cocos2dx_ActionTween(cx, obj); ????js_register_cocos2dx_TransitionFadeDown(cx, obj); ????js_register_cocos2dx_ParticleSun(cx, obj); ????js_register_cocos2dx_TransitionProgressHorizontal(cx, obj); ????js_register_cocos2dx_TMXObjectGroup(cx, obj); ????js_register_cocos2dx_TMXLayer(cx, obj); ????js_register_cocos2dx_FlipX(cx, obj); ????js_register_cocos2dx_FlipY(cx, obj); ????js_register_cocos2dx_TransitionSplitCols(cx, obj); ????js_register_cocos2dx_Timer(cx, obj); ????js_register_cocos2dx_FadeTo(cx, obj); ????js_register_cocos2dx_Repeat(cx, obj); ????js_register_cocos2dx_Place(cx, obj); ????js_register_cocos2dx_GLProgram(cx, obj); ????js_register_cocos2dx_EaseBounceOut(cx, obj); ????js_register_cocos2dx_RenderTexture(cx, obj); ????js_register_cocos2dx_TintBy(cx, obj); ????js_register_cocos2dx_TransitionShrinkGrow(cx, obj); ????js_register_cocos2dx_Sprite(cx, obj); ????js_register_cocos2dx_LabelTTF(cx, obj); ????js_register_cocos2dx_ClippingNode(cx, obj); ????js_register_cocos2dx_ParticleFlower(cx, obj); ????js_register_cocos2dx_ParticleSmoke(cx, obj); ????js_register_cocos2dx_LayerMultiplex(cx, obj); ????js_register_cocos2dx_Blink(cx, obj); ????js_register_cocos2dx_ShaderCache(cx, obj); ????js_register_cocos2dx_JumpTo(cx, obj); ????js_register_cocos2dx_ParticleExplosion(cx, obj); ????js_register_cocos2dx_TransitionJumpZoom(cx, obj); ????js_register_cocos2dx_Touch(cx, obj); ????js_register_cocos2dx_AnimationFrame(cx, obj); ????js_register_cocos2dx_NodeGrid(cx, obj); ????js_register_cocos2dx_TMXLayerInfo(cx, obj); ????js_register_cocos2dx_TMXTilesetInfo(cx, obj); ????js_register_cocos2dx_GridBase(cx, obj); ????js_register_cocos2dx_TiledGrid3D(cx, obj); ????js_register_cocos2dx_ParticleGalaxy(cx, obj); ????js_register_cocos2dx_Twirl(cx, obj); ????js_register_cocos2dx_MenuItemLabel(cx, obj); ????js_register_cocos2dx_LayerColor(cx, obj); ????js_register_cocos2dx_FadeOutBLTiles(cx, obj); ????js_register_cocos2dx_LayerGradient(cx, obj); ????js_register_cocos2dx_TargetedAction(cx, obj); ????js_register_cocos2dx_RepeatForever(cx, obj); ????js_register_cocos2dx_CardinalSplineTo(cx, obj); ????js_register_cocos2dx_CardinalSplineBy(cx, obj); ????js_register_cocos2dx_TransitionFlipY(cx, obj); ????js_register_cocos2dx_TurnOffTiles(cx, obj); ????js_register_cocos2dx_TintTo(cx, obj); ????js_register_cocos2dx_CatmullRomTo(cx, obj); ????js_register_cocos2dx_ToggleVisibility(cx, obj); ????js_register_cocos2dx_DrawNode(cx, obj); ????js_register_cocos2dx_TransitionTurnOffTiles(cx, obj); ????js_register_cocos2dx_RotateTo(cx, obj); ????js_register_cocos2dx_TransitionSplitRows(cx, obj); ????js_register_cocos2dx_TransitionProgressRadialCCW(cx, obj); ????js_register_cocos2dx_ScaleTo(cx, obj); ????js_register_cocos2dx_TransitionPageTurn(cx, obj); ????js_register_cocos2dx_BezierBy(cx, obj); ????js_register_cocos2dx_BezierTo(cx, obj); ????js_register_cocos2dx_Menu(cx, obj); ????js_register_cocos2dx_SpriteFrame(cx, obj); ????js_register_cocos2dx_ActionManager(cx, obj); ????js_register_cocos2dx_TransitionFade(cx, obj); ????js_register_cocos2dx_TransitionZoomFlipX(cx, obj); ????js_register_cocos2dx_SpriteFrameCache(cx, obj); ????js_register_cocos2dx_TransitionCrossFade(cx, obj); ????js_register_cocos2dx_Ripple3D(cx, obj); ????js_register_cocos2dx_TransitionSlideInL(cx, obj); ????js_register_cocos2dx_TransitionSlideInT(cx, obj); ????js_register_cocos2dx_StopGrid(cx, obj); ????js_register_cocos2dx_ShakyTiles3D(cx, obj); ????js_register_cocos2dx_PageTurn3D(cx, obj); ????js_register_cocos2dx_Grid3D(cx, obj); ????js_register_cocos2dx_TransitionProgressInOut(cx, obj); ????js_register_cocos2dx_EaseBackIn(cx, obj); ????js_register_cocos2dx_SplitRows(cx, obj); ????js_register_cocos2dx_Follow(cx, obj); ????js_register_cocos2dx_Animate(cx, obj); ????js_register_cocos2dx_ShuffleTiles(cx, obj); ????js_register_cocos2dx_ProgressTimer(cx, obj); ????js_register_cocos2dx_ParticleMeteor(cx, obj); ????js_register_cocos2dx_EaseInOut(cx, obj); ????js_register_cocos2dx_TransitionZoomFlipY(cx, obj); ????js_register_cocos2dx_ScaleBy(cx, obj); ????js_register_cocos2dx_Lens3D(cx, obj); ????js_register_cocos2dx_Animation(cx, obj); ????js_register_cocos2dx_TMXMapInfo(cx, obj); ????js_register_cocos2dx_EaseExponentialIn(cx, obj); ????js_register_cocos2dx_ReuseGrid(cx, obj); ????js_register_cocos2dx_MenuItemAtlasFont(cx, obj); ????js_register_cocos2dx_Liquid(cx, obj); ????js_register_cocos2dx_OrbitCamera(cx, obj); ????js_register_cocos2dx_ParticleBatchNode(cx, obj); ????js_register_cocos2dx_Component(cx, obj); ????js_register_cocos2dx_TextFieldTTF(cx, obj); ????js_register_cocos2dx_ParticleRain(cx, obj); ????js_register_cocos2dx_Waves(cx, obj); ????js_register_cocos2dx_EaseOut(cx, obj); ????js_register_cocos2dx_MenuItemFont(cx, obj); ????js_register_cocos2dx_TransitionFadeUp(cx, obj); ????js_register_cocos2dx_EaseSineOut(cx, obj); ????js_register_cocos2dx_JumpTiles3D(cx, obj); ????js_register_cocos2dx_MenuItemToggle(cx, obj); ????js_register_cocos2dx_RemoveSelf(cx, obj); ????js_register_cocos2dx_SplitCols(cx, obj); ????js_register_cocos2dx_MotionStreak(cx, obj); ????js_register_cocos2dx_RotateBy(cx, obj); ????js_register_cocos2dx_FileUtils(cx, obj); ????js_register_cocos2dx_ProgressTo(cx, obj); ????js_register_cocos2dx_TransitionProgressOutIn(cx, obj); ????js_register_cocos2dx_CatmullRomBy(cx, obj); ????js_register_cocos2dx_Sequence(cx, obj); ????js_register_cocos2dx_Shaky3D(cx, obj); ????js_register_cocos2dx_TransitionProgressRadialCW(cx, obj); ????js_register_cocos2dx_EaseBounceInOut(cx, obj); ????js_register_cocos2dx_TransitionSlideInR(cx, obj); ????js_register_cocos2dx___NodeRGBA(cx, obj); ????js_register_cocos2dx_ParallaxNode(cx, obj); ????js_register_cocos2dx_Scheduler(cx, obj); ????js_register_cocos2dx_EaseSineIn(cx, obj); ????js_register_cocos2dx_WavesTiles3D(cx, obj); ????js_register_cocos2dx_TransitionSlideInB(cx, obj); ????js_register_cocos2dx_Speed(cx, obj); ????js_register_cocos2dx_ShatteredTiles3D(cx, obj); }

首先看到的是從根對象中獲取一個“cc”屬性(如果獲取不到,就新建一個),因為JS中沒有名字空間的概念,所以我們使用一個cc對象來表示類似的功能。所有的類型和函數都是這個cc對象下面的屬性。在Cocos2d-x 3.0中,C++層面,類名去掉了CC的前綴,和js保持一致。


然后就是一大堆子函數,每個函數都負責注冊一個對應的類。打開js_register_cocos2dx_Sprite,這個函數負責注冊Sprite類。


打開js_register_cocos2dx_Sprite的實現代碼

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 void?js_register_cocos2dx_Sprite(JSContext *cx, JSObject *global) { ????jsb_cocos2d_Sprite_class = (JSClass *)calloc(1,?sizeof(JSClass)); ????jsb_cocos2d_Sprite_class->name =?"Sprite"; ????jsb_cocos2d_Sprite_class->addProperty = JS_PropertyStub; ????jsb_cocos2d_Sprite_class->delProperty = JS_DeletePropertyStub; ????jsb_cocos2d_Sprite_class->getProperty = JS_PropertyStub; ????jsb_cocos2d_Sprite_class->setProperty = JS_StrictPropertyStub; ????jsb_cocos2d_Sprite_class->enumerate = JS_EnumerateStub; ????jsb_cocos2d_Sprite_class->resolve = JS_ResolveStub; ????jsb_cocos2d_Sprite_class->convert = JS_ConvertStub; ????jsb_cocos2d_Sprite_class->finalize = js_cocos2d_Sprite_finalize; ????jsb_cocos2d_Sprite_class->flags = JSCLASS_HAS_RESERVED_SLOTS(2); ????static?JSPropertySpec properties[] = { ????????{0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER} ????}; ????static?JSFunctionSpec funcs[] = { ????????JS_FN("setSpriteFrame", js_cocos2dx_Sprite_setSpriteFrame, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("setTexture", js_cocos2dx_Sprite_setTexture, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("getTexture", js_cocos2dx_Sprite_getTexture, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("setFlippedY", js_cocos2dx_Sprite_setFlippedY, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("setFlippedX", js_cocos2dx_Sprite_setFlippedX, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("getBatchNode", js_cocos2dx_Sprite_getBatchNode, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("getOffsetPosition", js_cocos2dx_Sprite_getOffsetPosition, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("removeAllChildrenWithCleanup", js_cocos2dx_Sprite_removeAllChildrenWithCleanup, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("updateQuadVertices", js_cocos2dx_Sprite_updateQuadVertices, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("updateTransform", js_cocos2dx_Sprite_updateTransform, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("setTextureRect", js_cocos2dx_Sprite_setTextureRect, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("isFrameDisplayed", js_cocos2dx_Sprite_isFrameDisplayed, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("getAtlasIndex", js_cocos2dx_Sprite_getAtlasIndex, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("setBatchNode", js_cocos2dx_Sprite_setBatchNode, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("setDisplayFrameWithAnimationName", js_cocos2dx_Sprite_setDisplayFrameWithAnimationName, 2, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("setTextureAtlas", js_cocos2dx_Sprite_setTextureAtlas, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("getSpriteFrame", js_cocos2dx_Sprite_getSpriteFrame, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("isDirty", js_cocos2dx_Sprite_isDirty, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("setAtlasIndex", js_cocos2dx_Sprite_setAtlasIndex, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("setDirty", js_cocos2dx_Sprite_setDirty, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("isTextureRectRotated", js_cocos2dx_Sprite_isTextureRectRotated, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("getTextureRect", js_cocos2dx_Sprite_getTextureRect, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("getTextureAtlas", js_cocos2dx_Sprite_getTextureAtlas, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("isFlippedX", js_cocos2dx_Sprite_isFlippedX, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("isFlippedY", js_cocos2dx_Sprite_isFlippedY, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("setVertexRect", js_cocos2dx_Sprite_setVertexRect, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("ctor", js_cocos2d_Sprite_ctor, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FS_END ????}; ????static?JSFunctionSpec st_funcs[] = { ????????JS_FN("create", js_cocos2dx_Sprite_create, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("createWithTexture", js_cocos2dx_Sprite_createWithTexture, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("createWithSpriteFrameName", js_cocos2dx_Sprite_createWithSpriteFrameName, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FN("createWithSpriteFrame", js_cocos2dx_Sprite_createWithSpriteFrame, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????????JS_FS_END ????}; ????jsb_cocos2d_Sprite_prototype = JS_InitClass( ????????cx, global, ????????jsb_cocos2d_Node_prototype, ????????jsb_cocos2d_Sprite_class, ????????dummy_constructor<cocos2d::Sprite>, 0,?// no constructor ????????properties, ????????funcs, ????????NULL,?// no static properties ????????st_funcs); ????// make the class enumerable in the registered namespace ????JSBool found; ????JS_SetPropertyAttributes(cx, global,?"Sprite", JSPROP_ENUMERATE | JSPROP_READONLY, &found); ????// add the proto and JSClass to the type->js info hash table ????TypeTest<cocos2d::Sprite> t; ????js_type_class_t *p; ????std::string typeName = t.s_name(); ????if?(_js_global_type_map.find(typeName) == _js_global_type_map.end()) ????{ ????????p = (js_type_class_t *)malloc(sizeof(js_type_class_t)); ????????p->jsclass = jsb_cocos2d_Sprite_class; ????????p->proto = jsb_cocos2d_Sprite_prototype; ????????p->parentProto = jsb_cocos2d_Node_prototype; ????????_js_global_type_map.insert(std::make_pair(typeName, p)); ????} }


看起來比較長,其實很簡單,我們一段一段分析。


1 2 3 4 5 6 7 8 9 10 11 jsb_cocos2d_Sprite_class = (JSClass *)calloc(1,?sizeof(JSClass)); jsb_cocos2d_Sprite_class->name =?"Sprite"; jsb_cocos2d_Sprite_class->addProperty = JS_PropertyStub; jsb_cocos2d_Sprite_class->delProperty = JS_DeletePropertyStub; jsb_cocos2d_Sprite_class->getProperty = JS_PropertyStub; jsb_cocos2d_Sprite_class->setProperty = JS_StrictPropertyStub; jsb_cocos2d_Sprite_class->enumerate = JS_EnumerateStub; jsb_cocos2d_Sprite_class->resolve = JS_ResolveStub; jsb_cocos2d_Sprite_class->convert = JS_ConvertStub; jsb_cocos2d_Sprite_class->finalize = js_cocos2d_Sprite_finalize; jsb_cocos2d_Sprite_class->flags = JSCLASS_HAS_RESERVED_SLOTS(2);

首先,我們構造了一個JSClass對象,這個對象保存了一部分Sprite類的相關信息(注意,只是一部分而已)。其中包括類名,還有大量函數的占位符JS_XXXStub,這些函數是在一定情況下被調用的,如:添加刪除屬性,查看修改屬性等等。這塊其實不用特別關注,因為使用的都是SpiderMonkey自帶的缺省實現。Cocos2d-x引擎只是在最后把finalize函數替換成自己的函數了。最后那個參數表示這個類,有幾個Reserved Slots槽,這東西我們在之前講回調函數的時候見過。


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 static?JSPropertySpec properties[] = { ????{0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER} }; static?JSFunctionSpec funcs[] = { ????JS_FN("setSpriteFrame", js_cocos2dx_Sprite_setSpriteFrame, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("setTexture", js_cocos2dx_Sprite_setTexture, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("getTexture", js_cocos2dx_Sprite_getTexture, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("setFlippedY", js_cocos2dx_Sprite_setFlippedY, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("setFlippedX", js_cocos2dx_Sprite_setFlippedX, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("getBatchNode", js_cocos2dx_Sprite_getBatchNode, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("getOffsetPosition", js_cocos2dx_Sprite_getOffsetPosition, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("removeAllChildrenWithCleanup", js_cocos2dx_Sprite_removeAllChildrenWithCleanup, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("updateQuadVertices", js_cocos2dx_Sprite_updateQuadVertices, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("updateTransform", js_cocos2dx_Sprite_updateTransform, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("setTextureRect", js_cocos2dx_Sprite_setTextureRect, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("isFrameDisplayed", js_cocos2dx_Sprite_isFrameDisplayed, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("getAtlasIndex", js_cocos2dx_Sprite_getAtlasIndex, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("setBatchNode", js_cocos2dx_Sprite_setBatchNode, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("setDisplayFrameWithAnimationName", js_cocos2dx_Sprite_setDisplayFrameWithAnimationName, 2, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("setTextureAtlas", js_cocos2dx_Sprite_setTextureAtlas, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("getSpriteFrame", js_cocos2dx_Sprite_getSpriteFrame, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("isDirty", js_cocos2dx_Sprite_isDirty, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("setAtlasIndex", js_cocos2dx_Sprite_setAtlasIndex, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("setDirty", js_cocos2dx_Sprite_setDirty, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("isTextureRectRotated", js_cocos2dx_Sprite_isTextureRectRotated, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("getTextureRect", js_cocos2dx_Sprite_getTextureRect, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("getTextureAtlas", js_cocos2dx_Sprite_getTextureAtlas, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("isFlippedX", js_cocos2dx_Sprite_isFlippedX, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("isFlippedY", js_cocos2dx_Sprite_isFlippedY, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("setVertexRect", js_cocos2dx_Sprite_setVertexRect, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("ctor", js_cocos2d_Sprite_ctor, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FS_END }; static?JSFunctionSpec st_funcs[] = { ????JS_FN("create", js_cocos2dx_Sprite_create, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("createWithTexture", js_cocos2dx_Sprite_createWithTexture, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("createWithSpriteFrameName", js_cocos2dx_Sprite_createWithSpriteFrameName, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FN("createWithSpriteFrame", js_cocos2dx_Sprite_createWithSpriteFrame, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), ????JS_FS_END };

然后是填寫大量的參數,包括屬性,靜態屬性,函數,靜態函數。注意,因為Cocos2d-x的類完全使用Setter和Getter,所以一般是沒有屬性和靜態屬性的。比較重要的是靜態函數和普通函數。我們看一下宏函數JS_FN。他的第一個參數是函數名,這個和C++層的函數命名是一致的,第二個參數在SpiderMonkey調用JS層對應的C++函數時的回調函數,這個函數我們之前的文章中分析過。第三個參數是函數調用時的參數個數。最后一個參數,是一些訪問特性,JSPROP_PERMANENT表示不可刪除,JSPROP_ENUMERATE表示在枚舉時可見(JS的for遍歷)。


1 2 3 4 5 6 7 8 9 10 11 12 jsb_cocos2d_Sprite_prototype = JS_InitClass( ????cx, global, ????jsb_cocos2d_Node_prototype, ????jsb_cocos2d_Sprite_class, ????dummy_constructor<cocos2d::Sprite>, 0,?// no constructor ????properties, ????funcs, ????NULL,?// no static properties ????st_funcs); // make the class enumerable in the registered namespace JSBool found; JS_SetPropertyAttributes(cx, global,?"Sprite", JSPROP_ENUMERATE | JSPROP_READONLY, &found);

因為JS使用的是原型繼承,那么我們需要構造一個原型,需要的參數也很多,都是我們上面配置好的,上下文,父對象,原型,JSClass對象,各種屬性和函數。然后,會自動把這個原型設置為global(就是之前的cc對象)的一個屬性。最后,設置好訪問特性。


1 2 3 4 5 6 7 8 9 10 11 TypeTest<cocos2d::Sprite> t; ????js_type_class_t *p; ????std::string typeName = t.s_name(); ????if?(_js_global_type_map.find(typeName) == _js_global_type_map.end()) ????{ ????????p = (js_type_class_t *)malloc(sizeof(js_type_class_t)); ????????p->jsclass = jsb_cocos2d_Sprite_class; ????????p->proto = jsb_cocos2d_Sprite_prototype; ????????p->parentProto = jsb_cocos2d_Node_prototype; ????????_js_global_type_map.insert(std::make_pair(typeName, p)); ????}

最后這段代碼是Cocos2d-x引擎自己做的一個設計,把類型信息存到一個map里,這個設計以后會經常見到??梢杂脕聿樵?#xff0c;另外在JS虛擬機清空時,也用來遍歷刪除對應的類型信息。做法是先放到一個map里,然后cleanup時遍歷這個map即可。就不贅述了。









?本文轉自 老G 51CTO博客,原文鏈接:http://blog.51cto.com/goldlion/1357617,如需轉載請自行聯系原作者


總結

以上是生活随笔為你收集整理的【cocos2d-x从c++到js】14:注册函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

六月色 | www.久久成人 | 国产在线最新 | www.成人精品 | 丁香婷婷深情五月亚洲 | 国产丝袜高跟 | 午夜 在线 | 免费国产一区二区视频 | 日韩高清在线看 | 国产在线毛片 | 久久超碰在线 | 国产免费一区二区三区网站免费 | 久久精品网站免费观看 | 日日干综合 | 色综合久久久久久久久五月 | 色综合天天综合在线视频 | 99色免费 | 久草久 | 91久久国产自产拍夜夜嗨 | 在线免费观看黄网站 | 精品国产一区二区三区在线观看 | 亚洲天堂社区 | 狠狠色狠狠色综合日日92 | 天天操夜夜拍 | 人人插人人舔 | 亚洲欧美日本一区二区三区 | 国产福利网站 | 欧美91视频 | 国产一区二区日本 | 波多野结衣电影久久 | 最新国产在线观看 | 五月综合激情婷婷 | 视频在线亚洲 | 97国产在线播放 | 久久小视频 | 99精品免费在线观看 | 狠狠狠狠狠色综合 | 精品毛片在线 | 激情视频免费在线观看 | 久久8| 日本久久久亚洲精品 | 伊人久久影视 | 久久综合九色综合欧美狠狠 | 中文字幕成人在线 | 国产一区在线不卡 | 丁香婷婷色月天 | 91在线porny国产在线看 | 青青河边草免费直播 | 久久国内精品99久久6app | 久久综合中文字幕 | 精品电影一区二区 | www.人人草 | 亚洲视频在线视频 | 尤物97国产精品久久精品国产 | 91视频麻豆 | 国产精品18久久久久白浆 | 色婷婷www| 人九九精品 | 国产精品一区二区av日韩在线 | 亚洲色图 校园春色 | 91理论电影 | 久久精品资源 | 在线观看亚洲精品视频 | 成人在线播放免费观看 | 免费情缘 | 在线观看成人毛片 | 久久国产精品区 | 精品国产123 | 超碰97免费观看 | 俺要去色综合狠狠 | 欧美激情在线看 | 精品日韩中文字幕 | 精品一区二区日韩 | 久草在线视频网 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 手机在线日韩视频 | 中文一区在线观看 | 伊人婷婷网 | 日韩精品播放 | 日韩精品视频一二三 | 岛国一区在线 | 久久久久这里只有精品 | 日韩av在线资源 | 国产91精品一区二区麻豆网站 | 成人黄色资源 | 九九免费在线观看 | www.五月天| 成年人免费av | 91看片淫黄大片一级在线观看 | 久久免费毛片视频 | 国产五月 | 深夜福利视频在线观看 | 国产一级黄色片免费看 | 中文字幕免费不卡视频 | 色狠狠综合天天综合综合 | 精品国模一区二区 | 99精品视频在线观看 | 99精品在线播放 | 中文永久字幕 | 99精品国产aⅴ | 香蕉在线视频播放网站 | 成人中文字幕+乱码+中文字幕 | 免费a级大片| 永久免费精品视频网站 | 中国黄色一级大片 | 黄色成人小视频 | 久草在线欧美 | 欧美精品视 | www.玖玖玖| 国产视频二区三区 | 中文字幕精品一区二区精品 | 日本成人中文字幕在线观看 | 黄视频色网站 | 激情在线五月天 | 国产中文字幕久久 | 狠狠的操狠狠的干 | 天天爱天天操天天爽 | 午夜久久久久久久久久影院 | 亚洲成人麻豆 | 午夜精品久久久久久久99无限制 | 97精品久久人人爽人人爽 | 国产免费专区 | 欧美日韩中文国产 | 91精彩视频 | 国产97在线观看 | 最近中文字幕视频网 | 亚洲精品88欧美一区二区 | 欧美网站黄色 | 日韩精品久久久免费观看夜色 | 综合网伊人 | 国产系列在线观看 | av在线免费网站 | 毛片激情永久免费 | 亚洲一区网 | 亚洲日本va中文字幕 | 国产日韩欧美中文 | 9797在线看片亚洲精品 | 亚洲美女在线国产 | 97精品国产97久久久久久春色 | 天天干天天操天天搞 | 国产精品麻| 日韩欧美高清在线 | 午夜.dj高清免费观看视频 | 久久99久国产精品黄毛片入口 | 免费日韩视频 | 中文成人字幕 | 日韩高清无线码2023 | 日本久久精 | 亚洲精品午夜久久久久久久 | 最新三级在线 | 久久综合影院 | 国产精品自在欧美一区 | 日韩视频免费观看高清 | 欧美国产日韩一区二区三区 | 国产精品第一视频 | 亚洲专区路线二 | 在线免费三级 | 亚洲丝袜中文 | 天天草天天| www黄在线 | 五月婷婷,六月丁香 | 福利视频 | 97偷拍视频 | 成人片在线播放 | 激情综合五月天 | 91精品一区二区三区久久久久久 | 高清中文字幕av | 国产v欧美| 日韩成人av在线 | 国产一级视频在线免费观看 | 黄色a在线 | 2023天天干| 夜夜操狠狠操 | 欧美午夜精品久久久久久浪潮 | 天天色天天色 | 99精品免费久久久久久日本 | 三级黄色片在线观看 | 大胆欧美gogo免费视频一二区 | 四虎影视精品永久在线观看 | 在线观看成人福利 | www色综合 | 91网站观看 | 最近中文字幕完整视频高清1 | 中文字幕免费不卡视频 | 欧美一区日韩精品 | 日韩午夜高清 | 亚洲视频2 | 天天射成人 | 色天堂在线视频 | 国产91精品看黄网站 | 成人av中文字幕在线观看 | 久草在线观看资源 | 91九色porny蝌蚪视频 | 免费高清在线视频一区· | 六月丁香社区 | 黄色成人毛片 | 久久久人人人 | 久热电影| 日日草天天草 | 3d黄动漫免费看 | 欧美性粗大hdvideo | 精品国内自产拍在线观看视频 | 98涩涩国产露脸精品国产网 | 欧美国产日韩一区二区 | 国产亚洲情侣一区二区无 | 亚洲一级理论片 | 91成人小视频 | 免费久久网站 | 香蕉在线视频播放网站 | 黄色一级性片 | 911久久香蕉国产线看观看 | 97视频免费看 | 久久久精品欧美一区二区免费 | 三级av免费观看 | 亚洲成人免费 | 国产精品中文在线 | 国产亚洲精品久久网站 | 国产高清99 | 黄色大片av | 国产精品国产精品 | 国产精品久久久久久麻豆一区 | 狠狠干激情| 色噜噜色噜噜 | 99视频精品全部免费 在线 | 国产一区二区在线免费观看 | 国产高清视频免费最新在线 | 不卡av在线播放 | 国产91勾搭技师精品 | 国产中文字幕三区 | 久久久久亚洲精品成人网小说 | 欧美精品首页 | 久久久精品国产一区二区 | 精品在线一区二区 | 国产一级片在线播放 | 四虎国产永久在线精品 | 超碰97免费观看 | 毛片网在线播放 | 成人a毛片| 99热精品国产一区二区在线观看 | 日韩在线视频看看 | 色视频在线观看免费 | 狠狠操精品 | 免费在线播放av电影 | 国产黄色一级片 | 最新国产精品亚洲 | 手机av在线不卡 | 天天操天天干天天干 | 玖玖爱国产在线 | 欧美日韩午夜爽爽 | 中文字幕中文中文字幕 | 中文字幕在线视频精品 | 欧美激情精品久久久久久免费印度 | 91九色国产蝌蚪 | 欧美精品xxx | 在线一级片 | 日本久久成人中文字幕电影 | 亚州国产精品视频 | 久久久黄色 | 成人精品国产 | 99电影| 午夜精品久久久久久久99 | 最新中文在线视频 | 精品国产123 | www.xxxx欧美| 精品在线二区 | 国产不卡视频在线播放 | 国产精品日韩 | 免费看污黄网站 | 国产精品久久久久永久免费 | 在线精品播放 | 成年人视频免费在线 | 欧美孕交vivoestv另类 | av在线免费在线观看 | 看黄色91 | 91三级视频 | 国产亚洲精品久久久久久无几年桃 | 91在线亚洲 | 天天射天天色天天干 | 99国内精品久久久久久久 | 亚洲理论在线 | 欧美另类sm图片 | 最新的av网站 | 日韩精品视频在线观看免费 | 99精品视频在线看 | 日本精a在线观看 | 免费中午字幕无吗 | 久久精品8 | 国产精品久久久久三级 | 婷婷精品 | 国产精品久久久久久久久久久久冷 | 色婷婷中文 | 99国产高清| 国产精品久久久久久久免费 | 在线影院 国内精品 | 国内精品久久久久影院日本资源 | 91pony九色丨交换 | 久久成人精品电影 | 国产电影黄色av | 日韩网站免费观看 | 久久婷婷一区 | 久草精品视频在线观看 | 91探花国产综合在线精品 | www.狠狠 | 亚洲免费视频观看 | 欧美日韩精品免费观看视频 | 日韩高清免费在线 | a黄色影院 | 日韩欧美在线综合网 | 久久久久久久免费 | 久久无码av一区二区三区电影网 | 97精品视频在线 | 91高清免费观看 | 狠狠色丁香久久婷婷综合五月 | 中文字幕在线影院 | 在线免费高清一区二区三区 | 在线观看免费一区 | 国产精品一区二区免费在线观看 | 天堂av网址 | 伊人看片 | 日本性生活一级片 | 久久久久久黄 | 欧美91av| 中文字幕乱码亚洲精品一区 | 国产精品99久久久久久有的能看 | 日韩精品视频在线免费观看 | 性色va| 国产在线精品国自产拍影院 | 国产精品美女网站 | 2019天天干天天色 | 日韩在线视频精品 | 日韩和的一区二在线 | 久久精品视频国产 | 欧美日韩国产在线精品 | 久草久热| 四虎影视成人精品 | 91黄在线看 | 日韩av在线小说 | 亚洲色图 校园春色 | 国产日本亚洲高清 | av看片网 | 在线播放91| 国产高清精品在线 | 日韩啪啪小视频 | 久久99国产精品免费 | 国产群p| 免费精品在线观看 | 日本女人b | 国产精品不卡视频 | 精品国自产在线观看 | 日韩在线不卡视频 | 国产亚洲欧美日韩高清 | av福利第一导航 | 亚洲区精品 | 久精品视频在线 | www.五月婷| 亚洲电影院 | 99精品国产免费久久久久久下载 | 久热久草在线 | 国产成人av免费在线观看 | 最近日本字幕mv免费观看在线 | 91丨九色丨首页 | 国产99久久久久久免费看 | 亚洲国产成人精品在线观看 | 亚洲黄色区 | 国产99久久九九精品免费 | 在线v片 | 日韩精品一卡 | 欧美日韩国内在线 | av色综合网 | 精品国产美女 | 久草 | 国产日韩欧美在线观看视频 | 欧美国产不卡 | 天天操·夜夜操 | 亚洲另类视频在线 | 最新久久免费视频 | 国产精品久久久久久久久久久不卡 | 99色精品视频 | 日韩精品一区二区在线观看 | 亚洲成年人av| 日韩a级黄色 | 国产h在线播放 | 久久av在线| 久久看片网 | 精品爱爱| 国产色就色 | 激情综合国产 | av电影在线不卡 | 国产黄色资源 | 久久免费视频一区 | 天天爽夜夜爽精品视频婷婷 | 亚洲国产精品免费 | 热久久最新地址 | 日韩视频精品在线 | 999国内精品永久免费视频 | 人人插人人玩 | 久久久亚洲影院 | 玖玖玖在线 | 福利久久 | 狠狠狠狠狠干 | 在线免费国产 | 激情狠狠干 | 婷婷在线视频观看 | 久久99久久99免费视频 | 色com网 | 日韩免费在线视频观看 | 日本公妇在线观看高清 | 日韩中文久久 | 黄色日本免费 | 丁香婷五月 | 日本aaa在线观看 | 91女神的呻吟细腰翘臀美女 | 夜夜躁狠狠躁日日躁视频黑人 | 亚洲国产成人av网 | 在线视频黄| 成人免费在线观看电影 | 成年人在线免费视频观看 | 蜜臀精品久久久久久蜜臀 | 欧美一区二区三区在线播放 | 成人黄色资源 | 在线免费观看不卡av | 日韩免费电影 | 又黄又爽又湿又无遮挡的在线视频 | 久草视频在线免费 | 黄色亚洲在线 | 天天操天天艹 | 国产成人精品av在线观 | 日韩在线免费高清视频 | 久久久久99精品成人片三人毛片 | 婷婷在线免费 | 日韩免费av片 | 日本中文字幕网址 | 精品欧美一区二区精品久久 | 人人舔人人干 | 国产黄色精品在线观看 | 国内精品久久久久久久影视简单 | 丁香免费视频 | 女人18毛片a级毛片一区二区 | 韩日av一区二区 | 在线播放视频一区 | 亚洲精品在线电影 | 一区二区 不卡 | 最近中文字幕国语免费高清6 | a在线v| 国产精品国产三级国产aⅴ无密码 | 日韩精品久久久久久久电影99爱 | se视频网址 | 久久激情视频 久久 | 精品在线观 | 日韩va亚洲va欧美va久久 | 成人免费视频播放 | 国产精品不卡视频 | 欧美专区亚洲专区 | 久久99九九99精品 | 在线免费观看羞羞视频 | 91成人免费看 | 就要干b | 久久社区视频 | 蜜臀av性久久久久蜜臀av | 91最新国产 | 亚洲欧美少妇 | 国产小视频福利在线 | 久草爱视频| 国产精品国产三级国产aⅴ无密码 | 国产视频69 | 韩国精品一区二区三区六区色诱 | 国产日韩在线播放 | 99精品乱码国产在线观看 | 中文字幕免费久久 | 免费色网| 美女黄网站视频免费 | 日韩免费一二三区 | 精品久久久久久综合日本 | 91精品高清| 亚洲国产精品成人va在线观看 | 国产一级精品视频 | 最新中文在线视频 | 国产精品欧美一区二区 | 国产91电影在线观看 | 色爽网站| 日日爽视频 | 五月婷婷在线视频 | 日韩在线免费看 | 91视频国产免费 | 婷婷五月情 | 国产一区二区三区在线 | 欧美一级片在线 | 免费在线播放 | 99视频播放 | 99热这里精品 | 日韩欧美精品在线观看视频 | 亚洲高清在线 | 色免费在线 | 黄网站app在线观看免费视频 | 国产精品人成电影在线观看 | 免费色视频在线 | www.久久久.cum | 免费观看完整版无人区 | 韩日精品在线观看 | 色网站国产精品 | 日韩精品在线免费播放 | 久久精品一区二区三区中文字幕 | 亚洲一区美女视频在线观看免费 | 亚洲成人免费在线观看 | 色天天综合网 | 国产精品观看在线亚洲人成网 | 久久最新视频 | 午夜成人免费电影 | 国产精品国产三级在线专区 | 国产一级在线免费观看 | 99在线视频网站 | 成人久久久久久久久久 | 久久亚洲欧美日韩精品专区 | 日韩电影一区二区三区在线观看 | 欧美日韩中 | 精品国产欧美一区二区 | 成人免费观看a | 在线视频 91 | 免费国产在线精品 | 在线观看免费av网站 | 久久久免费精品国产一区二区 | 日韩av一区二区三区四区 | 91自拍视频在线 | 2022中文字幕在线观看 | 久久久综合香蕉尹人综合网 | 成人中心免费视频 | 色婷婷激情综合 | 久久精品超碰 | 成人影音在线 | 涩涩爱夜夜爱 | 91私密视频 | 中文字幕国产视频 | 久久久精品日本 | 97人人爽人人 | 免费看成人av| 亚洲精品系列 | 香蕉网在线 | 欧美另类高清 | 亚洲天堂网在线观看视频 | 91香蕉嫩草 | av三区在线| 香蕉蜜桃视频 | 久久大视频 | 草樱av| 奇米影音四色 | 在线观看亚洲免费视频 | av在线免费不卡 | 久草视频在线看 | 日本中文一级片 | 91亚色视频在线观看 | 国产精品毛片一区二区在线 | 精品一区精品二区 | 久久1区| 中文字幕第一页av | 婷婷亚洲激情 | 天天干天天色2020 | 亚洲第一区精品 | 国产福利在线免费 | 成人黄色av免费在线观看 | av超碰免费在线 | 91在线免费看片 | 国产在线播放一区 | 久草视频视频在线播放 | 国产亚洲精品久久久久久无几年桃 | 91日韩精品一区 | 国产小视频在线免费观看视频 | 日日射天天射 | 日日夜夜国产 | 一区二区视频电影在线观看 | 亚a在线| 免费瑟瑟网站 | 色94色欧美 | 久久精久久精 | www.久久视频 | 国产专区在线看 | 在线播放国产一区二区三区 | 91天堂素人约啪 | 久久精品爱爱视频 | 美女久久久久久久久久久 | 国产伦精品一区二区三区四区视频 | 一区二区中文字幕在线观看 | 又爽又黄又刺激的视频 | 波多野结衣视频一区二区三区 | 69国产精品成人在线播放 | 精品色999 | 精品亚洲免费 | 天天做日日爱夜夜爽 | 91精品免费在线观看 | 免费国产在线精品 | 日韩欧美在线观看一区 | 在线观看欧美成人 | 国产最顶级的黄色片在线免费观看 | 综合久久婷婷 | 手机版av在线| 久久国产精品久久久 | 欧美日韩一区二区三区不卡 | 国产在线第三页 | 久久精品屋 | 国产传媒中文字幕 | 欧美精品xx| 91精品国产三级a在线观看 | 又黄又网站 | 久久免费视频精品 | 日韩精品一区二 | 91久久国产精品 | 国产不卡视频在线 | 免费观看成人av | 婷婷av综合 | 综合婷婷久久 | 99久久久国产精品免费观看 | 美女精品在线 | 一本一道波多野毛片中文在线 | 91福利社区在线观看 | 国产精品一级在线 | 91资源在线观看 | 国产一区免费观看 | 久久精品超碰 | 亚洲午夜久久久久久久久久久 | 欧美电影黄色 | 五月婷婷激情 | 午夜精品999 | 欧美天堂视频在线 | 四虎影视久久久 | 人人搞人人干 | 精品女同一区二区三区在线观看 | 香蕉视频在线免费 | 美女黄频网站 | 亚洲日本va午夜在线电影 | 亚洲成色777777在线观看影院 | 国产色爽 | av导航福利 | 国产精品午夜在线 | 欧美久久久久久久久久 | 久久久精华网 | 在线视频观看亚洲 | 91精品999| 亚洲欧洲精品一区二区 | 亚洲精品在线免费 | 伊人午夜| 日日成人网 | 97香蕉久久国产在线观看 | 成人国产综合 | 人人爽人人插 | 黄色成年 | 91在线资源 | 中文亚洲欧美日韩 | 婷婷网五月天 | 首页中文字幕 | 国产一区二区在线看 | av免费成人 | 97在线观看视频 | 国产精品久久久久久久久久直播 | 国产一区二区视频在线播放 | 日韩成人在线免费观看 | 香蕉视频国产在线 | 在线成人av| 久久高清免费视频 | 97香蕉久久国产在线观看 | 国产麻豆精品免费视频 | av免费播放| 欧美中文字幕第一页 | 久久国产99 | 久草在线久草在线2 | 黄色在线视频网址 | 欧美日韩一区二区久久 | 免费在线观看日韩欧美 | 成人动漫精品一区二区 | 超碰在线观看av | 日韩欧美综合视频 | 日韩av在线小说 | 久草视频首页 | 在线观看黄色大片 | 久久香蕉影视 | 在线观看国产区 | 夜夜夜夜爽 | 久久激情久久 | 麻豆免费观看视频 | 夜夜骑天天操 | 国产高清黄| 日韩欧美有码在线 | 91精品啪在线观看国产81旧版 | 在线成人国产 | 天堂av免费观看 | 国产成人精品一区二区三区福利 | www.久久久 | 国产精品美女久久久久久久久久久 | 成人免费视频视频在线观看 免费 | 中文字幕乱偷在线 | 日韩精品视频网站 | 日韩精品一区二区三区电影 | 在线看片日韩 | a久久免费视频 | 人人看人人做人人澡 | 欧美午夜剧场 | 久久深夜| 99色国产| 最新国产精品久久精品 | 日韩在线电影观看 | 一区二区三区 亚洲 | 日韩三级在线观看 | 国产日产精品久久久久快鸭 | 免费高清在线观看成人 | 亚洲成人精品国产 | 九九激情视频 | 日本一区二区高清不卡 | 99福利片 | 国产视频1区2区3区 久久夜视频 | www狠狠| 天天色中文 | 探花系列在线 | 国产精品理论视频 | 久久99精品久久久久久 | 一级α片免费看 | 欧美疯狂性受xxxxx另类 | 黄色成人av| 久久久久久黄色 | 日本中文字幕在线免费观看 | h文在线观看免费 | 主播av在线 | 九色精品免费永久在线 | 国产在线观看99 | 91插插插免费视频 | 久久久99精品免费观看乱色 | 国产亚洲精品久久久久久大师 | 97精品在线 | 免费网站观看www在线观看 | 欧美日比视频 | 天堂中文在线视频 | 狠狠躁日日躁狂躁夜夜躁 | 国产123区在线观看 国产精品麻豆91 | 国产一区二区三区 在线 | aaa日本高清在线播放免费观看 | 四虎影视成人永久免费观看亚洲欧美 | 日韩色综合网 | 久久免费视频在线观看6 | 久久五月激情 | av五月婷婷| 91日韩在线| 一区二区中文字幕在线观看 | 91久久奴性调教 | 国产伦精品一区二区三区无广告 | 玖玖色在线观看 | 久久精品一区二区三区四区 | 欧美色图一区 | 成人免费 在线播放 | 日本精品一 | 午夜成人影视 | 欧美国产日韩一区二区三区 | 欧美夫妻生活视频 | 精精国产xxxx视频在线播放 | 日韩欧美大片免费观看 | 欧美十八 | 久久爱资源网 | 成人黄色小说在线观看 | 国产精品中文字幕在线观看 | 久久久久久久久久久免费视频 | 美女视频黄色免费 | 久久人人爽人人爽人人 | 美女露久久 | 色99之美女主播在线视频 | 99精品视频免费观看 | av福利网址导航 | 日韩精品免费在线播放 | 亚洲成免费 | 国产一级视屏 | 91福利视频久久久久 | 色综合久久久久久久 | 91大神一区二区三区 | 国产在线视频在线观看 | 日韩激情片在线观看 | 最新av免费在线 | 久久www免费视频 | 中文在线字幕免费观 | 超碰av在线播放 | 午夜性福利| 国产伦精品一区二区三区在线 | 免费观看91视频大全 | 国产精品福利无圣光在线一区 | 91九色视频在线播放 | 日韩精品不卡在线 | 91黄色在线视频 | 一区二区三区国产欧美 | 亚洲韩国一区二区三区 | 看全黄大色黄大片 | 在线不卡视频 | 丁香九月婷婷 | 国产日韩视频在线观看 | 国产免费专区 | 免费观看国产精品 | 日韩黄色在线电影 | 色网站在线 | 成年人在线观看免费视频 | 免费看黄在线观看 | 日韩av免费观看网站 | 久久99热精品这里久久精品 | 国产精品18毛片一区二区 | 成人在线视频观看 | 日韩动态视频 | 亚洲mv大片欧洲mv大片免费 | 国模一区二区三区四区 | 亚洲天堂社区 | 精品毛片在线 | 91精品中文字幕 | 精品久久久久久国产偷窥 | 国产精品网红福利 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 在线国产高清 | 99精品国产兔费观看久久99 | 一区电影| 久草视频手机在线 | 人操人| 成人免费毛片aaaaaa片 | 久草精品视频在线看网站免费 | 日本黄色a级大片 | 国产精品 日韩 欧美 | www.五月婷 | 在线观看视频免费大全 | 国产亚洲婷婷免费 | 久久视频精品在线观看 | 黄a在线 | 永久免费av在线播放 | 久久久污 | 天天干天天色2020 | 在线观看日韩一区 | 亚州天堂 | japanesefreesexvideo高潮 | 色91在线视频 | 在线观看网站你懂的 | 国内免费久久久久久久久久久 | 亚洲自拍自偷 | 在线观看理论 | 免费福利在线视频 | 成人午夜影院 | 91色在线观看 | 黄色一级免费 | 99在线看 | www久草 | 久久综合在线 | 国产999精品久久久久久绿帽 | 一区二区三区高清 | 国产免费黄色 | 中文字幕在线成人 | 亚洲激情中文 | 婷婷综合影院 | 欧美在线观看视频一区二区三区 | 国产精品嫩草在线 | 97视频在线观看成人 | 精品免费视频123区 午夜久久成人 | 免费观看www视频 | 日韩在线观看高清 | 四虎在线免费观看视频 | 亚洲精品乱码久久久久久蜜桃动漫 | 曰本三级在线 | 夜夜躁日日躁狠狠久久av | 国产精品淫 | 九九九视频精品 | 日日夜夜狠狠干 | 天天插天天操天天干 | 午夜三级在线 | 国产黄色大片免费看 | 手机在线中文字幕 | 精产嫩模国品一二三区 | 色资源二区在线视频 | 国产一卡久久电影永久 | 一区二区三区在线电影 | 天堂在线一区二区 | 91麻豆精品国产91久久久无需广告 | 99精品久久99久久久久 | 国产精品亚洲a | 日日摸日日爽 | 色噜噜日韩精品一区二区三区视频 | 国产成人一区二区三区 | 免费a v在线 | 81精品国产乱码久久久久久 | 999久久国产| 久久精品视频观看 | 成 人 黄 色视频免费播放 | 日本一区二区三区免费看 | 日韩免费在线视频观看 | 久9在线| 在线韩国电影免费观影完整版 | 国产午夜免费视频 | 欧美日韩一区二区三区在线观看视频 | 日韩精品一区二区三区三炮视频 | 国产特级毛片aaaaaaa高清 | 亚洲 中文 欧美 日韩vr 在线 | 久草久草在线 | 国产日韩欧美视频在线观看 | 97超碰在线久草超碰在线观看 | 精品久久久国产 | 国产日韩欧美精品在线观看 | 国产永久免费观看 | 欧美日韩视频在线播放 | av免费观看高清 | 久久久久综合视频 | 黄色一区二区在线观看 | 亚洲成人999| 国产一二区在线观看 | 久久久国际精品 | 色综合久久88色综合天天免费 | 国产一级免费在线观看 | 欧美色精品天天在线观看视频 | 麻豆一区在线观看 | a午夜在线 | av高清免费在线 | 天天综合导航 | 国产精品久久久久久一二三四五 | 国产在线色| 亚洲国产成人久久 | 一区二区中文字幕在线观看 | 亚洲欧美国产日韩在线观看 | 久久国产精品免费观看 | 一级电影免费在线观看 | 久久久久久美女 | 国产精品系列在线 | 国产小视频在线观看 | 色av男人的天堂免费在线 | 视频一区二区三区视频 | 在线免费av网 | 992tv在线 | 天天干天天操天天爱 | 亚洲日本va午夜在线影院 | 久久久久女人精品毛片九一 | 九九日九九操 | 国产成人在线精品 | 国产精品99精品久久免费 | 免费看短| 在线观看免费黄视频 | 久综合网 | 五月天中文字幕mv在线 | 久久99精品久久久久久久久久久久 | av不卡免费在线观看 | 人人人爽 | 97在线看片 | 亚洲激情婷婷 | 91 在线视频播放 | 狠狠操精品 | 欧美色图p | 欧美一区中文字幕 | 蜜桃视频成人在线观看 | 怡红院成人在线 | 亚洲黄色成人 | 国产精品网站 | 精品久久一二三区 | 五月天婷婷在线观看视频 | 在线 国产 日韩 | 中文字幕高清免费日韩视频在线 | 黄色电影网站在线观看 | 岛国av在线 | 欧美影院久久 | 精品久久99 | 日韩1级片 | 狠狠色网 | 天天色宗合 | 国产精品一区二区三区四区在线观看 | 亚洲精品视频免费在线 | 日韩av免费一区 | 婷婷在线不卡 | 久久免费毛片 | 国产精品婷婷午夜在线观看 | 中文字幕一区二区三区在线视频 | 久久精品一区二区三区视频 | 国产欧美久久久精品影院 | 日韩激情免费视频 | 91亚瑟视频 | 成人免费观看视频大全 | 国产精品久久久一区二区 | 精品久久久久久久久久久久久 | 婷婷婷国产在线视频 | 久久伊人综合 | 色综合天 | 国产成人福利在线 | 色网站视频| 成人夜晚看av | 国产自产在线视频 | 欧美久久久久 | 日韩欧美一区二区三区黑寡妇 | 欧美粗又大 | 黄污在线看 | 日韩两性视频 | 日韩欧美69 | 精品福利视频在线观看 | 香蕉在线播放 | 国产传媒中文字幕 | 国产精品夜夜夜一区二区三区尤 | 99久热 | 免费精品久久久 | 久久久久久99精品 | 国产青青青| 免费在线激情电影 | 久久久国产一区二区三区四区小说 | 天天操天天干天天爱 | 欧美午夜久久久 | 亚洲成av人影院 | 欧美一二三视频 | 国产伦精品一区二区三区在线 | 91精品夜夜 | 国产精品久久久久久婷婷天堂 |