Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cocos2d-x 2.0 TestCpp框架源码分析大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

好的引擎,会提供一系列完整的功能示例,Cocos2d-x之所以能得到很多人的喜爱,其重要的原因是它提供了丰富而易学的示例。在cocos2d-2.0-x-2.0.2中这些示例被放在一个名叫TESTCpp的工程中,为了更好的学习Cocos2d-x的功能示例,我们今天来学习一下这个工程的框架结构。


在VS的解决方案里展开TESTCpp工程,其下有43个示例目录,除此之前还有几个文件:

AppDelegate.h/cpp : 程序控制类AppDelegate 。

controller.h/cpp:示例场景管理类TESTController,用于显示所有示例的菜单。

TESTBasic.h/cpp:示例场景基类TestScene,用于返回到主界面场景。

testresource.h:文件资源名称字符串定义头文件

tests.h:示例总头文件

@H_223_2@main.h/cpp:主函数及头文件

所有的示例都是写在单独的由TestScene派生场景类中,在这些场景中加入一些由CCLayer派生的示例对象来实现相应功能的展示。

HelloWorld一样,我们需要在main.cpp中创建AppDelegate实例,并设置窗口大小,启动游戏程序。

  1. #include"main.h"
  2. #include"AppDelegate.h"
  3. #include"CCEGLView.h"
  4. USING_NS_Cc;
  5. //WIN32程序主函数
  6. intAPIENTRY_tWinMain(HINSTANCEhInstance,
  7. HINSTANCEhPrevInstance,
  8. LPTSTRlpCmdLine,87); BACkground-color:inherit">intnCmdShow)
  9. {
  10. UNREFERENCED_PARAMETER(hPrevInstancE);
  11. UNREFERENCED_PARAMETER(lpCmdLinE);
  12. //实例化一个Cocos2d-x程序对象
  13. AppDelegateapp;
  14. //创建OpenGL视窗并设置窗口大小
  15. CCEGLView*eglView=CCEGLView::sharedopenGLView();
  16. eglView->setFrameSize(480,320);
  17. //运行程序对象
  18. returnCCApplication::sharedApplication()->run();
  19. }

@H_197_197@

@H_197_197@在AppDelegate.cpp中的boolAppDelegate::applicationDid。FinishLaunching()函数中创建场景并运行场景

copy

    boolAppDelegate::applicationDidFinishLaunching()
  1. //取得当前显示设备指针并设置其OpenGL视窗
  2. CCDirector*pDirector=CCDirector::sharedDirector();
  3. pDirector->setOpenGLView(CCEGLView::sharedopenGLView());
  4. //取得当前运行硬件平台
  5. TargetPlatformtarget=getTargetPlatform();
  6. //如果是IPAD
  7. if(target==kTargetIpad)
  8. //如果能启动高清屏,使用高精度资源,否则使用一般精度资源
  9. if(pDirector->enableReTinaDisplay(true))
  10. {
  11. CCFileUtils::sharedFileUtils()->setresourceDirectory("ipadhd");
  12. }
  13. else
  14. CCFileUtils::sharedFileUtils()->setresourceDirectory("ipad");
  15. }
  16. //如果是Iphone
  17. elseif(target==kTargetIphonE)
  18. //如果能启动高清屏,使用高精度资源
  19. true))
  20. CCFileUtils::sharedFileUtils()->setresourceDirectory("hd");
  21. //设置FPS信息显示
  22. pDirector->setDisplayStats(true);
  23. //设置帧间隔时间
  24. pDirector->setAnimationInterval(1.0/60);
  25. //在这里创建一个场景
  26. CCScene*pScene=CCScene::create();
  27. //实例化一个TESTController,它是一个CCLayer。
  28. CCLayer*pLayer=newTESTController();
  29. //设置由内存管理器来进行自动回收,不必手动deletE
  30. pLayer->autorelease();
  31. //将它放置到场景中
  32. pScene->addChild(pLayer);
  33. //运行这个新创建的场景。
  34. pDirector->runWithScene(pScenE);
  35. returntrue;
  36. }

下面我们来看一下TESTBase.h/cpp,这里面有一个所有示例都要用到的场景基类TestScene。

copy
    #ifndef_test_BASIC_H_
  1. #define_test_BASIC_H_
  2. //Cocos2d头文件
  3. #include"cocos2d.h"
  4. //使用COcos2d命名空间
  5. usingnamespacestd;
  6. classTestScene:publicCCScene
  7. public:
  8. //构造
  9. TestScene(boolbPorTrait=false);
  10. //场景被加载时的回调函数
  11. virtualvoidonEnter();
  12. //自定义的虚函数,用于运行场景。
  13. voidrunThisTest()=0;
  14. //返回主界面的菜单按钮响应回调函数。
  15. void@H_33_76@mainMenuCallBACk(CCObject*pSender);
  16. };
  17. #endif

@H_197_197@cpp文件:

@H_197_197@

copy
    #include"TESTBasic.h"
  1. #include"controller.h"
  2. //构造函数
  3. TestScene::TestScene(boolbPorTrait)
  4. CCScene::init();
  5. //场景被加载时的回调函数
  6. voidTestScene::onEnter()
  7. CCScene::onEnter();
  8. //#if(CC_TARGET_PLATFORM==CC_PLATFORM_MARMALADE)
  9. //CCLabelBMFont*label=CCLabelBMFont::create("MainMenu","fonts/arial16.fnt");
  10. //#else
  11. //创建一个文字标签,显示“MainMenu”字符串
  12. CCLabelTTF*label=CCLabelTTF::create("MainMenu","Arial",20);
  13. //#endif
  14. //增加一个菜单标签,设定其被按下时的回调函数,用于返回到主界面
  15. CCMenuItemLabel*pMenuItem=CCMenuItemLabel::create(label,this,menu_SELEctor(TestScene::MainMenuCallBACk));
  16. //将菜单标签加入创建的菜单中,并设置相应位置。
  17. CCMenu*pMenu=CCMenu::create(pMenuItem,null);
  18. CCSizes=CCDirector::sharedDirector()->getWinSize();
  19. pMenu->setPosition(CCPointZero);
  20. pMenuItem->setPosition(CCPointMake(s.width-50,25));
  21. //将菜单放入场景中。
  22. addChild(pMenu,1);
  23. //菜单标签被按下时的响应函数
  24. voidTestScene::MainMenuCallBACk(CCObject*pSender)
  25. //新创建一个场景。
  26. CCScene*pScene=CCScene::create();
  27. //新创建一个TESTController对象
  28. CCLayer*pLayer=newTESTController();
  29. //将它放入新创建的场景中并运行。
  30. CCDirector::sharedDirector()->replaceScene(pScenE);
  31. }

@H_197_197@

在TestScene中,提供了一个可以被点击的标签MainMenu,从字面意思就知道点击它可以返回主菜单界面,这个主菜单在哪呢?就是TESTController。

copy
    #ifndef_CONTROLLER_H_
  1. #define_CONTROLLER_H_
  2. classTESTController:publicCCLayer
  3. public:
  4. //构造
  5. TESTController();
  6. //析构
  7. ~TESTController();
  8. //菜单项响应回调函数
  9. void@H_33_76@menuCallBACk(CCObject*pSender);
  10. //关闭程序响应回调函数
  11. voidcloseCallBACk(CCObject*pSender);
  12. //按下触点响应函数。
  13. voidccTouchesBegan(CCSet*pTouches,CCEvent*pEvent);
  14. //按下状态移动触点响应函数。
  15. voidccTouchesMoved(CCSet*pTouches,153); BACkground-color:inherit">private:
  16. //接下状态移动触点的开始位置
  17. CCPointm_tBeginPos;
  18. //主菜单
  19. CCMenu*m_pItemMenu;
  20. };
  21. #endif
进入Cpp看一下:
copy
    #include"controller.h"
  1. #include"testresource.h"
  2. #include"tests.h"
  3. //菜单项的行间距,设40点
  4. #defineLINE_SPACE40
  5. //创建一个当前触点位置变量,初始化为左下角位置。
  6. staticCCPoints_tCurPos=CCPointZero;
  7. //创建指定的示例场景
  8. staticTestScene*CreateTestScene(intnIdX)
  9. //先清空一下显示设备使用的数据
  10. CCDirector::sharedDirector()->purgeCachedData();
  11. //定义TestScene指针用于接收创建的示例场景
  12. TestScene*pScene=NULL;
  13. //跟据参数来创建相应的TestScene派生类对象。
  14. switch(nIdX)
  15. casetest_ACTIONS://动画处理
  16. pScene=newActionsTestScene();break;
  17. casetest_TRANSITIONS://场景切换
  18. newTransitionsTestScene();casetest_PROGRESS_ACTIONS://进度动画控制
  19. newProgressActionsTestScene();casetest_EFFECTS://特效演示
  20. newEffectTestScene();casetest_CLICK_AND_MOVE://拖动演示
  21. newClickAndMoveTestScene();casetest_ROTATE_WORLD://旋转CCLayer
  22. newRotateWorldTestScene();casetest_PARTICLE://粒子系统
  23. newParticleTestScene();casetest_EASE_ACTIONS://多样化运动动画
  24. newActionsEaseTestScene();casetest_R_372_11845@OTION_STREAK://拖尾动画效果
  25. new@H_33_76@motionStreakTestScene();casetest_DRAW_PRIMITIVES://基本图形绘制
  26. newDrawPrimitivesTestScene();casetest_COCOsnoDE://结点控制
  27. newCocosnodeTestScene();casetest_TOUCHES://触屏处理
  28. newPongScene();casetest_R_372_11845@ENU://菜单处理
  29. new@H_33_76@menuTestScene();casetest_ACTION_MANAGER://动画管理
  30. newActionManagerTestScene();casetest_LAYER://CCLayer功能展示
  31. newLayerTestScene();casetest_SCENE://CCScene功能展示
  32. newSceneTestScene();casetest_PARALLAX://视角控制
  33. newParallaxTestScene();casetest_TILE_MAP://基于格子的地图
  34. newTileMapTestScene();casetest_INTERVAL://时间控制
  35. newIntervalTestScene();casetest_CHIPMUNKACCELTOUCH://ChipMunk物理引擎与多点触屏
  36. #if(CC_TARGET_PLATFORM!=CC_PLATFORM_MARMALADE)
  37. pScene=newChipmunkAccelTouchTestScene();break;
  38. #else
  39. #ifdefMARMALADEUSECHIPMUNK
  40. #if(MARMALADEUSECHIPMUNK==1)
  41. newChipmunkAccelTouchTestScene();
  42. #endif
  43. #endif
  44. casetest_LABEL://文字标签
  45. newAtlasTestScene();casetest_TEXT_INPUT://输入处理
  46. newTexTinputTestScene();casetest_SPRITE://精灵功能展示
  47. newSpriteTestScene();casetest_scheDULER://动画的时间调度
  48. newschedulerTestScene();casetest_RENDERTEXTURE://渲染到纹理
  49. newRenderTextureScene();casetest_TEXTURE2D://纹理功能展示
  50. newTextureTestScene();casetest_BOX2D://Box2D物理引擎展示
  51. newBox2DTestScene();casetest_BOX2DBED://Box2D物理引擎展示[物体的固定与连接]
  52. newBox2dTESTBedScene();casetest_EFFECT_ADVANCE://高级屏幕效果
  53. newEffectAdvanceScene();casetest_ACCELEROMRTER://加速度
  54. newAccelerometerTestScene(); #if(CC_TARGET_PLATFORM!=CC_PLATFORM_BADA)
  55. casetest_KEYPAD://键区处理
  56. newKeypadTestScene();casetest_COCOSDENSHION://声效控制
  57. newCocosDenshionTestScene();casetest_PERFORMANCE://性能测试
  58. newPerfoRMANCETestScene();casetest_ZWOPTEX://ZWOPTEX动国
  59. newZwoptexTestScene();//badadon'tsupportlibcurl
  60. casetest_CURL://网络通信基本演示
  61. newCurlTestScene();casetest_USERDEFAULT://用户日志保存示例
  62. newUserDefaultTestScene();casetest_BUGS://BUG示例
  63. newBugsTestScene();casetest_FONTS://字体演示
  64. newFontTestScene();casetest_CURRENT_LANGUAGE://获取当前语言
  65. newCurrentLanguageTestScene(); #if(CC_TARGET_PLATFORM!=CC_PLATFORM_MARMALADE)
  66. casetest_TEXTURECACHE:pScene=newTextureCacheTestScene();casetest_EXTENSIONS:
  67. {//更多扩展实例
  68. newExtensionsTestScene();
  69. casetest_SHADER://使用Shader的渲染演示
  70. newShaderTestScene();
  71. casetest_R_372_11845@UTITOUCH://多点触屏
  72. new@H_33_76@mutiTouchTestScene();
  73. default:
  74. //返回创建的场景
  75. returnpScene;
  76. TESTController::TESTController()
  77. :m_tBeginPos(CCPointZero)
  78. //加入一个关闭菜单按钮
  79. CCMenuItemImage*pCloseItem=CCMenuItemImage::create(s_pPathClose,s_pPathClose,menu_SELEctor(TESTController::closeCallBACk));
  80. //创建一个菜单放置关闭按钮
  81. CCMenu*pMenu=CCMenu::create(pCloseItem,null);
  82. CCSizes=CCDirector::sharedDirector()->getWinSize();
  83. //设置这个菜单位置
  84. pCloseItem->setPosition(CCPointMake(s.width-30,s.height-30));
  85. //新建一个测试项菜单,将所有代表测试场景的菜单标签项加入菜单
  86. @H_622_73@m_pItemMenu=CCMenu::create();
  87. //
  88. for(inti=0;i<TESTS_COUNT;++i)
  89. //#if(CC_TARGET_PLATFORM==CC_PLATFORM_MARMALADE)
  90. //CCLabelBMFont*label=CCLabelBMFont::create(g_aTestNames[i].c_str(),"fonts/arial16.fnt");
  91. //#else
  92. CCLabelTTF*label=CCLabelTTF::create(g_aTestNames[i].c_str(),"Arial",24);
  93. CCMenuItemLabel*pMenuItem=CCMenuItemLabel::create(label,menu_SELEctor(TESTController::menuCallBACk));
  94. //将代表测试场景的菜单标签加入菜单中,以i+10000的值做为Z值。
  95. @H_622_73@m_pItemMenu->addChild(pMenuItem,i+10000);
  96. //设置代表测试场景的菜单标签在测试项菜单层的位置
  97. pMenuItem->setPosition(CCPointMake(s.width/2,(s.height-(i+1)*LINE_SPACE)));
  98. //设置测试项菜单的大小
  99. @H_622_73@m_pItemMenu->setContentSize(CCSizeMake(s.width,(TESTS_COUNT+1)*(LINE_SPACE)));
  100. //设置测试项菜单的位置
  101. @H_622_73@m_pItemMenu->setPosition(s_tCurPos);
  102. //将测试项菜单放入当前CCLayer
  103. addChild(m_pItemMenu);
  104. //设置开启触屏事件响应
  105. setTouchEnabled(true);
  106. //将关闭按钮项菜单放入当前CCLayer
  107. addChild(pMenu,1);
  108. TESTController::~TESTController()
  109. //点击菜单项的事件响应函数
  110. voidTESTController::menuCallBACk(CCObject*pSender)
  111. //取得菜单项
  112. CCMenuItem*pMenuItem=(CCMenuItem*)(pSender);
  113. //取得Z值,减10000算出是第几个菜单项
  114. intnIdx=pMenuItem->getZOrder()-10000;
  115. //创建相应的场景
  116. TestScene*pScene=CreateTestScene(nIdX);
  117. if(pScenE)
  118. //运行当前测试场景
  119. pScene->runThisTest();
  120. //runThisTest中会对其引用计数加1变为2,这里做一次引用计数减1操作,以保证后面再释放场景时可以正常的释放。
  121. pScene->release();
  122. //点击关闭按钮时的响应处理
  123. voidTESTController::closeCallBACk(CCObject*pSender)
  124. //退出程序
  125. CCDirector::sharedDirector()->end();
  126. #if(CC_TARGET_PLATFORM==CC_PLATFORM_IOS)
  127. exit(0);
  128. //触点按下时的响应处理
  129. voidTESTController::ccTouchesBegan(CCSet*pTouches,CCEvent*pEvent)
  130. //获取第一个触点位置
  131. CCSetIteratorit=pTouches->begin();
  132. CCTouch*touch=(CCTouch*)(*it);
  133. //将位置保存到变量m_tBeginPos中。
  134. @H_622_73@m_tBeginPos=touch->getLOCATIOn();
  135. //触点
  136. voidTESTController::ccTouchesMoved(CCSet*pTouches,CCEvent*pEvent)
  137. //获取第一个触点位置
  138. CCSetIteratorit=pTouches->begin();
  139. CCTouch*touch=(CCTouch*)(*it);
  140. //取得这个位置与上一帧移动的Y值之差,即在纵方向的偏移。
  141. CCPointtouchLOCATIOn=touch->getLOCATIOn();
  142. floatnMoveY=touchLOCATIOn.y-m_tBeginPos.y;
  143. //计算菜单在纵方向上也移动相应值后的新位置。
  144. CCPointcurPos=m_pItemMenu->getPosition();
  145. CCPointnextPos=ccp(curPos.x,curPos.y+nMoveY);
  146. //这里对新位置的有效范围做个限定
  147. CCSizewinSize=CCDirector::sharedDirector()->getWinSize();
  148. if(nextPos.y<0.0f)
  149. @H_622_73@m_pItemMenu->setPosition(CCPointZero);
  150. return;
  151. if(nextPos.y>((TESTS_COUNT+1)*LINE_SPACE-winSize.height))
  152. @H_622_73@m_pItemMenu->setPosition(ccp(0,((TESTS_COUNT+1)*LINE_SPACE-winSize.height)));
  153. //更新菜单到新位置
  154. @H_622_73@m_pItemMenu->setPosition(nextPos);
  155. //记录当前位置为旧位置。
  156. @H_622_73@m_tBeginPos=touchLOCATIOn;
  157. s_tCurPos=nextPos;
  158. }

总结:示例框架展示了一个菜单,每个菜单项代表了一个示例工程,菜单项的Z值是递增排列的。点击菜单项响应TESTController::menuCallBACk函数,此函数通过减去Z值基数可以取得菜单项的索引,并通过CreateTestScene(nIdX);来创建出相应的示例场景。本示例框架还演示了如何在纵方向上拖动一个菜单。


大佬总结

以上是大佬教程为你收集整理的Cocos2d-x 2.0 TestCpp框架源码分析全部内容,希望文章能够帮你解决Cocos2d-x 2.0 TestCpp框架源码分析所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:cocoscocos2ddtestcpp分析框架源码
猜你在找的Cocos2d-x相关文章
其他相关热搜词更多
phpJavaPython程序员load如何string使用参数jquery开发安装listlinuxiosandroid工具javascriptcap