cocos2d-x 笔记综合

  1. /* 
  2. *1  逻辑代码中都使用 do {} while(0) 样式, 主要是代码中  CC_BREAK_IF(!XX);  中使用了 if() break, 如果没有for  while  if  等条件语句,会报错  
  3. */  
  4. void fun()  
  5. {  
  6.     do  
  7.     {  
  8.         .......  
  9.         CC_BREAK_IF(! XX);  
  10.     }while(0);  
  11. }  
  12.   
  13.   
  14. /* 
  15. *2  场景可由 CCLayer 继承,在层中定义一个创建scene 的静态成员函数,也可以直接由CCScene 继承  
  16. */  
  17. CCScene* TitleScene::scene()  
  18. {  
  19.     CCScene * scene = NULL;  
  20.     do   
  21.     {  
  22.         // 'scene' is an autorelease object  
  23.         scene = CCScene::node();  
  24.         CC_BREAK_IF(! scene);  
  25.   
  26.         // 'layer' is an autorelease object  
  27.         TitleScene *layer = TitleScene::node();  
  28.         CC_BREAK_IF(! layer);  
  29.   
  30.         // add layer as a child to scene  
  31.         scene->addChild(layer);  
  32.     } while (0);  
  33.   
  34.     // return the scene  
  35.     return scene;  
  36. }  
  37.   
  38.   
  39. /* 
  40. *3   cocos2d-x 在win32 平台支持中文, 在其它平台可支持,win32 平台汉字为gb2312编码,但在 cocos2d-x 中使用的是utf-8编码,所以需要转换 
  41. */  
  42. #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)  
  43. #include "iconv.h" //此文件在 cocos2d-x 里面  
  44. //字符转换,使cocos2d-x在win32平台支持中文显示  
  45. int GBKToUTF8(std::string &gbkStr,const char* toCode,const char* formCode)  
  46. {  
  47.     iconv_t iconvH;  
  48.     iconvH = iconv_open(formCode,toCode);  
  49.     if(iconvH == 0)  
  50.     {  
  51.         return -1;  
  52.     }  
  53.   
  54.     const char* strChar = gbkStr.c_str();  
  55.     const char** pin = &strChar;  
  56.   
  57.     size_t strLength = gbkStr.length();  
  58.     char* outbuf = (char*)malloc(strLength*4);  
  59.     char* pBuff = outbuf;  
  60.     memset(outbuf,0,strLength*4);  
  61.     size_t outLength = strLength*4;  
  62.     if(-1 == iconv(iconvH,pin,&strLength,&outbuf,&outLength))  
  63.     {  
  64.         iconv_close(iconvH);  
  65.         return -1;  
  66.     }  
  67.   
  68.     gbkStr = pBuff;  
  69.     iconv_close(iconvH);  
  70.     return 0;  
  71. }  
  72. #endif   
  73.   
  74.   
  75. /* 
  76. *4  创建文字列表菜单,在 CCLayer 的子类中的init初使化过程中 
  77. */  
  78. bool TitleScene::init()  
  79. {  
  80.     do  
  81.     {  
  82.         //.....  
  83.         std::string menuItemStr = "新游戏";  
  84. #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)  
  85.         GBKToUTF8(menuItemStr,"gb2312","utf-8");  
  86. #endif   
  87.         CCMenuItem *newGame = CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,menu_selector(TitleScene::menuNewCallback));  
  88.   
  89.         menuItemStr = "设置";  
  90. #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)  
  91.         GBKToUTF8(menuItemStr,"gb2312","utf-8");  
  92. #endif   
  93.         CCMenuItem *optionGame=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,menu_selector(TitleScene::menuOptionCallback));  
  94.   
  95.         menuItemStr = "退出";  
  96. #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)  
  97.         GBKToUTF8(menuItemStr,"gb2312","utf-8");  
  98. #endif   
  99.         CCMenuItem *quitGame=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,menu_selector(TitleScene::menuQuitCallback));  
  100.   
  101.         CCMenu *menu=CCMenu::menuWithItems(newGame,optionGame,quitGame,NULL);  
  102.         menu->alignItemsVertically();//竖直排列  
  103.         //menu->alignItemsInColumns(2, 2, 2, 2, 1, NULL);//菜单排列方式每行 几个  
  104.   
  105.         this->addChild(menu,1);  
  106.     }while(0);  
  107. }  
  108.   
  109.   
  110. /* 
  111. *5   菜单点击回调函数, 菜单点击事件 
  112. */  
  113. //头文件中定义  
  114. void menuNewCallback(CCObject* pSender);  
  115. //实现文件中使用 menu_selector(XXXXX)  
  116. CCMenuItem *newGame = CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,menu_selector(TitleScene::menuNewCallback));  
  117.   
  118. void TitleScene::menuNewCallback( CCObject* pSender )  
  119. {  
  120.     CCScene *scene=FlyScene::scene();  
  121.     CCDirector::sharedDirector()->replaceScene(scene);  
  122. }  
  123.   
  124.   
  125. /* 
  126. *6   菜单字体颜色,大小,字体设置 
  127. */  
  128. void fun()  
  129. {  
  130.     CCMenuItemFont *quitGame=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,menu_selector(TitleScene::menuQuitCallback));  
  131.     quitGame->setColor()  
  132.     quitGame->setFontSize()  
  133.     quitGame->setFontName()  
  134.     .....  
  135.     CCMenu *menu=CCMenu::menuWithItems(newGame,optionGame,quitGame,NULL);  
  136.     menu->setColor(ccc3(255,0,0));//注意  ccc3     ccc4  
  137.       
  138.     //全局设置   
  139.     CCMenuItemFont::setFontName("Thonburi");  
  140.     CCMenuItemFont::setFontSize(25);  
  141.       
  142.     //指定特殊字体文件  
  143.     CCLabelBMFont* label = CCLabelBMFont::labelWithString("configuration""fonts/bitmapFontTest3.fnt");  
  144. }  
  145.   
  146.   
  147. /* 
  148. *7   场景切换,场景切换动画,场景结束退出 
  149. */  
  150. void TitleScene::menuClickCallback(CCObject* pSender)  
  151. {  
  152.     //结束   
  153.     CCDirector::sharedDirector()->end();  
  154.     //切换   
  155.     CCScene *scene = XXXX;  
  156.     CCDirector::sharedDirector()->replaceScene(scene);  
  157.     //切换动画  
  158.     //CCTransitionCrossFade::transitionWithDuration()  
  159.     //CCTransitionFlipX::transitionWithDuration()  
  160.     CCDirector::sharedDirector()->replaceScene(CCTransitionCrossFade::transitionWithDuration(1.2f,scene));  
  161.     CCTransitionJumpZoom::transitionWithDuration(t, s);//跳跃式,本场景先会缩小,然后跳跃进来  
  162.   
  163. CCTransitionFade::transitionWithDuration(t, s);//淡出淡入,原场景淡出,新场景淡入  
  164.   
  165. CCTransitionFade::transitionWithDuration(t, s, ccWHITE);//如果上一个的函数,带3个参数,则第三个参数就是淡出淡入的颜色 CCTransitionFlipX::transitionWithDuration(t, s, kOrientationLeftOver);//x轴左翻  
  166.   
  167.  CCTransitionFlipX::transitionWithDuration(t, s, kOrientationRightOver);//x轴右翻  
  168.   
  169. CCTransitionFlipY::transitionWithDuration(t, s, kOrientationUpOver);//y轴上翻  
  170.   
  171. CCTransitionFlipY::transitionWithDuration(t, s, kOrientationDownOver);//y轴下翻  
  172.   
  173.  CCTransitionFlipAngular::transitionWithDuration(t, s, kOrientationLeftOver);//有角度转的左翻  
  174.   
  175.  CCTransitionFlipAngular::transitionWithDuration(t, s, kOrientationRightOver);//有角度转的右翻  
  176.   
  177. CCTransitionZoomFlipX::transitionWithDuration(t, s, kOrientationLeftOver);//带缩放效果x轴左翻  
  178.   
  179. CCTransitionZoomFlipX::transitionWithDuration(t, s, kOrientationRightOver);//带缩放效果x轴右翻  
  180.   
  181.  CCTransitionZoomFlipY::transitionWithDuration(t, s, kOrientationUpOver);//带缩放效果y轴上翻  
  182.   
  183. CCTransitionZoomFlipY::transitionWithDuration(t, s, kOrientationDownOver);//带缩放效果y轴下翻  
  184.   
  185. CCTransitionZoomFlipAngular::transitionWithDuration(t, s, kOrientationLeftOver);//带缩放效果/有角度转的左翻  
  186.   
  187. CCTransitionZoomFlipAngular::transitionWithDuration(t, s, kOrientationRightOver);//带缩放效果有角度转的右翻  
  188.   
  189. CCTransitionShrinkGrow::transitionWithDuration(t, s);//交错换  
  190.   
  191. CCTransitionRotoZoom::transitionWithDuration(t, s);//转角换  
  192.   
  193. CCTransitionMoveInL::transitionWithDuration(t, s);//新场景从左移入覆盖  
  194.   
  195. CCTransitionMoveInR::transitionWithDuration(t, s);//新场景从右移入覆盖  
  196.   
  197. CCTransitionMoveInT::transitionWithDuration(t, s);//新场景从上移入覆盖  
  198.   
  199.  CCTransitionMoveInB::transitionWithDuration(t, s);//新场景从下移入覆盖  
  200.   
  201. CCTransitionSlideInL::transitionWithDuration(t, s);//场景从左移入推出原场景  
  202.   
  203.  CCTransitionSlideInR::transitionWithDuration(t, s);//场景从右移入推出原场景  
  204.   
  205.  CCTransitionSlideInT::transitionWithDuration(t, s);//场景从上移入推出原场景  
  206.   
  207. CCTransitionSlideInB::transitionWithDuration(t, s);//场景从下移入推出原场景  
  208.   
  209. 以下三个需要检测opengl版本是否支持CCConfiguration::sharedConfiguration()->getGlesVersion() <= GLES_VER_1_0如果为真则为不支持 CCTransitionCrossFade::transitionWithDuration(t,s);//淡出淡入交叉,同时进行  
  210.   
  211.  CCTransitionRadialCCW::transitionWithDuration(t,s);//顺时针切入  
  212.   
  213.  CCTransitionRadialCW::transitionWithDuration(t,s);//逆时针切入  
  214.   
  215. 以下两个需要先设置摄像机,使用CCDirector::sharedDirector()->setDepthTest(true);  
  216.   
  217.  CCTransitionPageTurn::transitionWithDuration(t, s, false);//翻页,前翻  
  218.   
  219.  CCTransitionPageTurn::transitionWithDuration(t, s, true);//翻页,后翻  
  220.   
  221. CCTransitionFadeTR::transitionWithDuration(t, s);//向右上波浪  
  222.   
  223. CCTransitionFadeBL::transitionWithDuration(t, s);//向左下波浪  
  224.   
  225. CCTransitionFadeUp::transitionWithDuration(t, s);//向上百叶窗  
  226.   
  227. CCTransitionFadeDown::transitionWithDuration(t, s);//向下百叶窗  
  228.   
  229. CCTransitionTurnOffTiles::transitionWithDuration(t, s);//随机小方块  
  230.   
  231.  CCTransitionSplitRows::transitionWithDuration(t, s);//按行切  
  232.   
  233.  CCTransitionSplitCols::transitionWithDuration(t, s);//按列切  
  234.   
  235.   
  236. }  
  237.   
  238. /* 
  239. *8  背景音乐 
  240. */  
  241.   
  242. void fun()  
  243. {  
  244.     CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background-music-aac.wav"true);  
  245.     SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();  
  246.     SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();  
  247. }  
  248.   
  249.   
  250. /* 
  251. *9  计划任务,定时器的使用 
  252. */  
  253. //头文件类中定义,最多两参数,可以一个参数,第一个参数为调用的方法,第二个参数为间隔时间 ccTime, ccTime 即 float ,此参数可选,如果没有设定时间,则即时刷新  
  254. void HelloWorld::gameLogic(ccTime dt);//参数为ccTime   
  255.   
  256. void fun()  
  257. {  
  258.     this->schedule( schedule_selector(HelloWorld::gameLogic), 1.0 );  
  259.     this->schedule( schedule_selector(HelloWorld::updateGame) );  
  260.     this->unschedule(schedule_selector(HelloWorld::updateGame));//取消定时器  
  261. }  
  262.   
  263.   
  264. /* 
  265. *10  设置背景图片 
  266. */  
  267.   
  268. void fun()  
  269. {  
  270.      CCSize size = CCDirector::sharedDirector()->getWinSize();  
  271.      //添加背景  
  272.      CCSprite* pSprite = CCSprite::spriteWithFile("background.png");  
  273.      CC_BREAK_IF(! pSprite);  
  274.   
  275.      // Place the sprite on the center of the screen  
  276.      pSprite->setPosition(ccp(size.width/2, size.height/2));  
  277.   
  278.      // Add the sprite to TitleScene layer as a child layer.  
  279.      this->addChild(pSprite, 0);//背景设置为0层,即底层  
  280. }  
  281.   
  282.   
  283. /* 
  284. *11  Label 使用, CCLabelTTF 
  285. */  
  286.   
  287. void fun()  
  288. {  
  289.     std::string titleStr = "hello world";//注意中文在win32 中需要转换编码 utf-8  
  290.     CCLabelTTF* pLabel = CCLabelTTF::labelWithString(titleStr.c_str(), "Thonburi", 30);  
  291.     CC_BREAK_IF(! pLabel);  
  292.     pLabel->setColor(ccRED);  
  293.   
  294.     CCSize size = CCDirector::sharedDirector()->getWinSize();  
  295.     pLabel->setPosition(ccp(size.width / 2, size.height*0.8f));  
  296.   
  297.     this->addChild(pLabel, 1);  
  298. }  
  299.   
  300.   
  301. /* 
  302. *12  启动触屏点击事件  Touch 
  303. */  
  304. //头文件定义   
  305. virtual void ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);  
  306. virtual void ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);  
  307. virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);  
  308.   
  309. bool  init()  
  310. {  
  311.     do  
  312.     {  
  313.         ....  
  314.         this->setIsTouchEnabled(true);  
  315.         .....  
  316.     }while(0);  
  317. }  
  318.   
  319. void ccTouchesBegan( CCSet *pTouches, CCEvent *pEvent )  
  320. {  
  321.     CCTouch *touch = (CCTouch*)pTouches->anyObject();  
  322.     CCPoint location = touch->locationInView(touch->view());  
  323.     //得到点击的点的坐标, OPENGL 坐标  
  324.     CCPoint convertedLocation = CCDirector::sharedDirector()->convertToGL(location);  
  325.       
  326.     //得到人物角色的区域  rect  
  327.     CCRect rect=sprite->boundingBox();  
  328.     //判断点击坐标是否在人物角色区域内  
  329.     if (CCRect::CCRectContainsPoint(rect,convertedLocation))  
  330.     {  
  331.         .........  
  332.     }  
  333. }  
  334.   
  335. void ccTouchesMoved( CCSet *pTouches, CCEvent *pEvent )  
  336. {  
  337.     CCTouch *touch = (CCTouch*)pTouches->anyObject();  
  338.     CCPoint location = touch->locationInView(touch->view());  
  339.     CCPoint convertedLocation = CCDirector::sharedDirector()->convertToGL(location);  
  340.     .......  
  341. }  
  342.   
  343. void ccTouchesEnded( CCSet *pTouches, CCEvent *pEvent )  
  344. {  
  345.     ........  
  346. }  
  347.   
  348. //允许触屏   
  349. CCTouchDispatcher::sharedDispatcher()->setPriority(kCCMenuTouchPriority+1, this);  
  350. //不允许触屏   
  351. CCTouchDispatcher::sharedDispatcher()->setPriority(kCCMenuTouchPriority-1, this);  
  352.   
  353.   
  354. /* 
  355. *13   多层的使用  CCLayer   CCLayerMultiplex,层的切换 
  356. */  
  357.   
  358. void fun() //CCScene 继承的子类的方法  
  359. {  
  360.     CCLayer* pLayer1 = new MenuLayer1();  
  361.     CCLayer* pLayer2 = new MenuLayer2();  
  362.     CCLayer* pLayer3 = new MenuLayer3();  
  363.     CCLayer* pLayer4 = new MenuLayer4();  
  364.   
  365.     CCLayerMultiplex* layer = CCLayerMultiplex::layerWithLayers(pLayer1, pLayer2, pLayer3, pLayer4, NULL);  
  366.     addChild(layer, 0);   
  367.   
  368.     pLayer1->release();  
  369.     pLayer2->release();  
  370.     pLayer3->release();  
  371.     pLayer4->release();  
  372.   
  373.     CCDirector::sharedDirector()->replaceScene(this);  
  374. }  
  375. //层的切换,  m_pParent  为系统内置变量  
  376. void fun()  
  377. {  
  378.     ((CCLayerMultiplex*)m_pParent)->switchTo(1);  
  379. }  
  380.   
  381.   
  382. /* 
  383. *14   动作,角色移动  action,  
  384. */  
  385.   
  386. void fun()  
  387. {  
  388.     CCSize winSize = CCDirector::sharedDirector()->getWinSize();  
  389.     CCSprite *projectile = CCSprite::spriteWithFile("Projectile.png", CCRectMake(0, 0, 20, 20));  
  390.     projectile->setPosition( ccp(20, winSize.height/2) );//起点  
  391.     ......  
  392.     //CCPoint  realDest  终点,   realMoveDuration  持续时间  
  393.     projectile->runAction( CCSequence::actions(  
  394.         CCMoveTo::actionWithDuration(realMoveDuration, realDest),  
  395.         CCCallFuncN::actionWithTarget(this,   
  396.   
  397.         callfuncN_selector(HelloWorld::spriteMoveFinished)),   
  398.         NULL) );  
  399.           
  400.     //循环跳跃     
  401.     CCJumpBy* jump = CCJumpBy::actionWithDuration(3, CCPointMake(400,0), 50, 4);  
  402.     item2->runAction( CCRepeatForever::actionWithAction(  
  403.                                 (CCActionInterval*)(CCSequence::actions( jump, jump->reverse(), NULL))  
  404.                                 )  
  405.                     );  
  406.     //循环旋转   
  407.     CCActionInterval* spin1 = CCRotateBy::actionWithDuration(3, 360);  
  408.     CCActionInterval* spin2 = (CCActionInterval*)(spin1->copy()->autorelease());  
  409.     CCActionInterval* spin3 = (CCActionInterval*)(spin1->copy()->autorelease());  
  410.       
  411.     item1->runAction( CCRepeatForever::actionWithAction(spin1) );  
  412.     item2->runAction( CCRepeatForever::actionWithAction(spin2) );  
  413.     item3->runAction( CCRepeatForever::actionWithAction(spin3) );  
  414. }  
  415.   
  416. /* 
  417. *15  闪动字体动画特效 
  418. */  
  419.   
  420. void fun()  
  421. {  
  422.     CCMenuItemFont* item6 = CCMenuItemFont::itemFromString("Quit"this, menu_selector(MenuLayer1::onQuit));  
  423.       
  424.     CCActionInterval* color_action = CCTintBy::actionWithDuration(0.5f, 0, -255, -255);  
  425.     CCActionInterval* color_back = color_action->reverse();  
  426.     CCFiniteTimeAction* seq = CCSequence::actions(color_action, color_back, NULL);  
  427.     item6->runAction(CCRepeatForever::actionWithAction((CCActionInterval*)seq));  
  428.   
  429.     CCMenu* menu = CCMenu::menuWithItems( item6, NULL);  
  430.     menu->alignItemsVertically();  
  431.     this->addChild(menu);  
  432. }  
  433.   
  434.   
  435. /* 
  436. *16   特殊字体设置,比如图片字体,  图片字体库由一个  .fnt 文件和一个  .png 图片文件组成, fnt文件中定义了字体属性,这种方式可以实现系统字库中不存在的字体,以图片来代替文字 
  437. */  
  438. void fun()  
  439. {  
  440.         CCLabelAtlas* labelAtlas = CCLabelAtlas::labelWithString("0123456789""fonts/fps_images.png", 16, 24, '.');  
  441.         CCMenuItemLabel* item3 = CCMenuItemLabel::itemWithLabel(labelAtlas, this, NULL );  
  442.         item3->setDisabledColor( ccc3(255,32,64) );  
  443.         item3->setColor( ccc3(125,147,255) );  
  444.   
  445.   
  446.         CCLabelBMFont* label = CCLabelBMFont::labelWithString("configuration""fonts/bitmapFontTest3.fnt");  
  447.         CCMenuItemLabel* item5 = CCMenuItemLabel::itemWithLabel(label, this, NULL);  
  448.   
  449.         //放大倍数  
  450.         item5->setScale( 2.8f );  
  451.   
  452.         CCMenu *menu = CCMenu::menuWithItems(item3,item5,NULL);  
  453.         menu->alignItemsVertically();  
  454.         this->addChild(menu);  
  455. }  
  456.   
  457.   
  458. /* 
  459. *17   菜单的遍历,动态特效 
  460. */  
  461.   
  462. void fun()  
  463. {  
  464.     int i=0;  
  465.     CCNode* child;  
  466.     CCArray * pArray = menu->getChildren();  
  467.     CCObject* pObject = NULL;  
  468.     CCARRAY_FOREACH(pArray, pObject)  
  469.     {  
  470.         if(pObject == NULL)  
  471.             break;  
  472.   
  473.         child = (CCNode*)pObject;  
  474.   
  475.         CCPoint dstPoint = child->getPosition();  
  476.         int offset = (int) (s.width/2 + 50);  
  477.         if( i % 2 == 0)  
  478.             offset = -offset;  
  479.           
  480.         child->setPosition( CCPointMake( dstPoint.x + offset, dstPoint.y) );  
  481.         child->runAction(   
  482.                             CCEaseElasticOut::actionWithAction(  
  483.                                                                 CCMoveBy::actionWithDuration(2, CCPointMake(dstPoint.x - offset,0)), 0.35f  
  484.                                                             )   
  485.                         );  
  486.         i++;  
  487.     }  
  488. }  
  489.   
  490.   
  491. /* 
  492. *18   菜单触发器,菜单子项 
  493. */  
  494.   
  495. void fun()  
  496. {  
  497.     CCMenuItemToggle *item4 = CCMenuItemToggle::itemWithTarget( this,   
  498.                                                                 menu_selector(MenuLayer4::menuCallback),   
  499.                                                                 CCMenuItemFont::itemFromString( "Off" ),   
  500.                                                                 NULL );  
  501.     item4->getSubItems()->addObject( CCMenuItemFont::itemFromString( "33%" ) );   
  502.     item4->getSubItems()->addObject( CCMenuItemFont::itemFromString( "66%" ) );   
  503.     item4->getSubItems()->addObject( CCMenuItemFont::itemFromString( "100%" ) );   
  504.       
  505.     item4->setSelectedIndex( 2 );  
  506.     //item4->getSelectedIndex();  
  507. }  
  508.   
  509. //在点击事件中可以进行处理  
  510. void menuCallBack(CCObject *sender)  
  511. {  
  512.     dynamic_cast<CCMenuItemToggle*>(sender)->selectedItem();  
  513.     dynamic_cast<CCMenuItemToggle*>(sender)->selectedIndex();  
  514. }  
  515.   
  516. /* 
  517. *19  精灵的各种应用 
  518. */  
  519. 1,锚点  
  520.   
  521. 锚点就是所有旋转,移动,缩放的参考点。cocos2-x中默认的锚点是中心点。锚点用比例来表示范围为0-1,(0,0)点代表左下点,(1,1)代表右上点。设置的函数为setAnchorPoint(ccp(0.5, 0.5));  
  522.   
  523. 2,旋转  
  524.   
  525. setRotation(angle) 其中angle为角度不是弧度。正数为顺时针旋转,负数为逆时针旋转。  
  526.   
  527. 3,位置  
  528.   
  529. setPosition(ccp(xPos, yPos)) xPos和yPos为相对于父节点锚点的位置。  
  530.   
  531. 4,缩放  
  532.   
  533. setScale(s);   // 整体缩放  
  534.   
  535. setScaleX(s); // 原图片坐标X轴缩放  
  536.   
  537. setScaleY(s); // 原图片坐标Y轴缩放  
  538.   
  539. s为比例,s = 1表示原尺寸。  
  540.   
  541. 5,倾斜  
  542.   
  543. setSkewX(s); // 原图片坐标X轴倾斜  
  544.   
  545. setSkewY(s); // 原图片坐标Y轴倾斜  
  546.   
  547. X轴向右为正,Y轴向上为正。  
  548.   
  549. 6,透明度  
  550.   
  551. setOpacity(s);  
  552.   
  553. s范围0-255,0完全透明,255完全不透明。  
  554.   
  555. 7,可见  
  556.   
  557. setIsVisible(bVisible)  
  558.   
  559. bVisible为booltrue代表可见false代表不可见  
  560.   
  561. 8,翻转  
  562.   
  563. setFlipX(bFlip);  // 水平翻转  
  564.   
  565. setFlipY(bFlip);  // 竖直翻转  
  566.   
  567. bFlip为true,则图片翻转,false不翻转。注意,翻转是针对原图片的操作,水平翻转相当于在图片编辑软件里水平翻转一样。不根据锚点进行翻转。翻转以后,设置的以前设置的锚点不会随着图片的翻转而改变。比如设置右下角为锚点,则翻转以后,锚点为翻转后的图片的右下角(是不是有点绕?)  
  568.   
  569. 最后,初始化完成后,不要忘了使用addChild加入到父节点,否则是不会显示的。  
  570.   
  571.   
  572. /* 
  573. *20  进度条,进度条由两张图片组成。一张作背景,另一张则在背景上以动画形式显示出来,此处可以作为竞技血条或时间条 
  574. */  
  575. void fun()  
  576. {  
  577.         CCSprite *bg = CCSprite::spriteWithFile("images/button_moregame1.png");  
  578.         bg->setPosition(CCPointMake(100,size.height/2));  
  579.         this->addChild(bg,1);  
  580.   
  581.   
  582.         CCProgressTo *to1 = CCProgressTo::actionWithDuration(6, 100);  
  583.         CCProgressTo *to2 = CCProgressTo::actionWithDuration(2, 100);  
  584.   
  585.         CCProgressTimer *left = CCProgressTimer::progressWithFile("images/button_moregame2.png");  
  586.         left->setType( kCCProgressTimerTypeHorizontalBarRL );  
  587.         addChild(left,2);  
  588.         //left->setPercentage(55.0f);  
  589.         left->setPosition(CCPointMake(100, size.height/2+3));  
  590.         left->runAction( CCRepeatForever::actionWithAction(to1));  
  591. }  
  592.   
  593. void fun1()  
  594. {  
  595. //进度条加载满时 触发一个事件  void progressCallback(CCNode *pSender);  
  596.     CCSprite *bg = CCSprite::spriteWithFile("images/button_moregame1.png");  
  597.         bg->setPosition(CCPointMake(100,size.height/2));  
  598.         this->addChild(bg,1);  
  599.   
  600.   
  601.         CCProgressTo *to1 = CCProgressTo::actionWithDuration(6, 100);  
  602.         CCProgressTo *to2 = CCProgressTo::actionWithDuration(2, 100);  
  603.   
  604.         CCProgressTimer *left = CCProgressTimer::progressWithFile("images/button_moregame2.png");  
  605.         left->setType( kCCProgressTimerTypeHorizontalBarRL );  
  606.         addChild(left,2);  
  607.         //left->setPercentage(55.0f);  
  608.         left->setPosition(CCPointMake(100, size.height/2+3));  
  609.         //left->runAction( CCRepeatForever::actionWithAction(to1));  
  610.   
  611.         //CCCallFuncN* action_call_back = CCCallFuncN::actionWithTarget(this,callfuncN_selector(DegreeScene::progressCallback));  
  612.         left->runAction(CCSequence::actions(to1,CCCallFuncN::actionWithTarget(this,  
  613.             callfuncN_selector(DegreeScene::progressCallback)),NULL));  
  614. }  
  615.   
  616. /* 
  617. *21  设置加速 
  618. */  
  619. void fun  
  620. {  
  621.     setIsTouchEnabled( true );//可触屏  
  622.     setIsAccelerometerEnabled( true );//加速计  
  623. }  
  624.   
  625. /* 
  626. *22  多张图片动画 
  627. */  
  628. void fun()  
  629. {  
  630. CCAnimation* animation = CCAnimation::animation();  
  631.   
  632. char frameName[100] = {0};  
  633.   
  634. forint i=1;i<34;i++){  
  635.   
  636.     sprintf(frameName, "demo%04d.png", i);  
  637.   
  638.     animation->addFrameWithFileName(frameName);  
  639.   
  640. }  
  641.   
  642. CCActionInterval*  action = CCAnimate::actionWithDuration(1.0f, animation, false);  
  643.   
  644. }  
  645.   
  646. CCSprite *p2 = CCSprite::spriteWithFile("name1.png");//首先还是要创建一个精灵对象  
  647.   
  648.   
  649. p2->setPosition(CCPointMake(240,160));  
  650.   
  651. this->addChild (p2,1);  
  652.   
  653. CCAnimation* animation = CCAnimation::animation();  
  654.   
  655.   char frameName[100] = {0};  
  656.   
  657.   forint i=1;i<=4;i++)    //图片的张数  
  658.   
  659.   {  
  660.   
  661.         sprintf(frameName, "name%d.png", i);       //循环  
  662.   
  663.        animation->addFrameWithFileName(frameName);     
  664.   
  665.    }  
  666.   
  667.     CCActionInterval*  action = CCAnimate::actionWithDuration(0.5f, animation, false);   //0.5f 是切换图片的时间  
  668.   
  669.   CCActionInterval*  action_back = action->reverse();//返回到原先的状态  
  670.   
  671.   sp2->runAction(action);  
  672.   
  673.    
  674.   
  675. 这样就实现了简单的连帧动画了!  
  676.   
  677. 同时可以定义其他的动作:  
  678.   
  679. CCMoveTo  
  680.   
  681. CCMoveBy  
  682.   
  683. CCJumpTo  
  684.   
  685. 。。。  
  686.   
  687. sp2->runAction(CCSequence::actions(action1,action2,action3,NULL));//不要忘了加NULL哦  
  688.     
  689.   
  690.   
  691. sp2->runAction(CCSequence::actions(action1,CCDelayTime:;actionWithDuration(3),action2,NULL));//actionWithDuration()里面的参数是时间  

你可能感兴趣的:(cocos2d-x 笔记综合)