cocos2d-x学习笔记—图片按钮

[cpp]  view plain  copy
  1. //  
  2. //  button.cpp  
  3. //  buttontest  
  4. //  
  5. //  
  6. //  
  7.   
  8. #include "MyButtonScene.h"  
  9. #include "SimpleAudioEngine.h"  
  10.   
  11. using namespace cocos2d;  
  12. using namespace CocosDenshion;  
  13. bool MyButton::init()  
  14. {  
  15.   
  16.     if(!CCLayer::init())  
  17.     {  
  18.         return false;  
  19.     }  
  20.      CCSize size=CCDirector::sharedDirector()->getWinSize();   //获得屏幕的大小  
  21.     CCMenuItemImage *menuImage1=CCMenuItemImage::create("CloseNormal.png""CloseSelected.png"this,menu_selector(MyButton::menuCloseCallback1));  
  22.     menuImage1->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width-20,20));  
  23.     CCMenu *menu=CCMenu::create(menuImage1,NULL);  
  24.     menu->setPosition(CCPointZero);  
  25.     this->addChild(menu,2);  
  26.     CCSprite *nsprite=CCSprite::create("HelloWorld.png");  
  27.     nsprite->setPosition(ccp(size.width/2,size.height/2));  
  28.     this->addChild(nsprite,0);  
  29.   
  30.       
  31.     //CCLabelTTF *pttf=CCLabelTTF::create("hah", "Thonburi", 50);  
  32.     //pttf->setPosition(CCDirector::sharedDirector()->getWinSize().width/2,120);  
  33.     CCMenuItemFont *fontpttf=CCMenuItemFont::create("pttf",this,menu_selector(MyButton::menuCloseCallback1));  
  34.     this->addChild(fontpttf,1);  
  35.     this->setScale(0.5);  
  36.       
  37.     //实现横排列图标及透明度切换  
  38.     for (int i=0; i<2; i++) {  
  39.     CCMenuItemImage *menuImage2=CCMenuItemImage::create("btn-about-normal.png""btn-about-selected.png",this,menu_selector(MyButton::menuCloseCallback1));  
  40.     CCMenuItemImage *menuImage3=CCMenuItemImage::create("btn-highscores-normal.png""btn-highscores-selected.png",this,menu_selector(MyButton::menuCloseCallback1));  
  41.     CCMenuItemImage *menuImage4=CCMenuItemImage::create("btn-play-normal.png""btn-play-selected.png",menuImage2,menu_selector(MyButton::menuCloseCallback2));  
  42.     menuImage2->setTag(2); //添加标签,以便后期调用  
  43.     menuImage2->setEnabled(false);//设置按钮不可用  
  44.   
  45.     CCMenu *menu2=CCMenu::create(menuImage2,menuImage3,menuImage4,NULL);  
  46.     CCSize size=CCDirector::sharedDirector()->getWinSize();  
  47.     menu2->setPosition(ccp(size.width/4, size.height/4));  
  48.     menu2->alignItemsHorizontally();  
  49.     menu2->setOpacity(128);  //设置透明度  
  50.     this->addChild(menu2,1,100+i);  
  51.     }  
  52.      
  53.   
  54.     //实现图标的竖排排列  
  55.     CCMenuItemImage *menuImage8=CCMenuItemImage::create("btn-about-normal.png""btn-about-selected.png",this,menu_selector(MyButton::menuCloseCallback3));  
  56.     CCMenuItemImage *menuImage9=CCMenuItemImage::create("btn-highscores-normal.png""btn-highscores-selected.png",this,menu_selector(MyButton::menuCloseCallback4));  
  57.     CCMenuItemImage *menuImage10=CCMenuItemImage::create("btn-play-normal.png""btn-play-selected.png",this,menu_selector(MyButton::menuCloseCallback5));  
  58.     CCMenu *menu4=CCMenu::create(menuImage8,menuImage9,menuImage10,NULL);  
  59.     menu4->alignItemsVerticallyWithPadding(200);  
  60.     //menu3->setPosition(ccp()  
  61.     menu4->setTag(20);  
  62.     this->addChild(menu4,1);  
  63.       
  64.     //实现文字之间的切换(回调函数实现透明度的改变)  
  65.     CCMenuItemFont::setFontSize(34);  
  66.     CCMenuItemToggle *toggle= CCMenuItemToggle::createWithTarget(  
  67.                                                       this,  
  68.                                                       menu_selector(MyButton::menuCloseCallback1),CCMenuItemFont::create("on"),  
  69.                                                       CCMenuItemFont::create("off"),  
  70.                                                       NULL);  
  71.     toggle->setSelectedIndex(0);  
  72.     toggle->setPosition(ccp(size.width/4*3,size.height/4*3));  
  73.     CCMenu *menu5=CCMenu::create(toggle,NULL);  
  74.     this->addChild(menu5,2);  
  75.       
  76.       
  77.       
  78.     //实现图片之间点击切换  
  79.       
  80.     CCMenuItemImage *image1=CCMenuItemImage::create("btn-about-normal.png""btn-about-selected.png");  
  81.     CCMenuItemImage *image2=CCMenuItemImage::create("btn-highscores-normal.png""btn-highscores-selected.png");  
  82.     CCMenuItemImage *image3=CCMenuItemImage::create("btn-play-normal.png""btn-play-selected.png");  
  83.     CCMenuItemToggle *togglee=CCMenuItemToggle::createWithTarget(this,  
  84.                                                                  menu_selector(MyButton::menuCallback),  
  85.                                                                  image1,  
  86.                                                                  image2,  
  87.                                                                  image3,  
  88.                                                                  NULL);  
  89.       
  90.     CCMenu *ccmenuu=CCMenu::create(togglee,NULL);  //实现三者之间的顺序切换  
  91.     ccmenuu->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width/2-120,CCDirector::sharedDirector()->getWinSize().height/2));  
  92.     this->addChild(ccmenuu,2);  
  93.       
  94.       
  95.       
  96.     //精灵相关  
  97.     int idx=(int )(CCRANDOM_0_1()*1400/100);   //CCRANDOM_0_1()为系统定义的宏,实现产生0-1之间的随机数  
  98.     int x=(idx%5)*85;  
  99.     int y= (idx/5)*121;  
  100.     CCSprite *sprite=CCSprite::create("grossini_dance_atlas.png",CCRectMake(x, y, 85, 121));  //从图片中截取部分,构成精灵  
  101.     this->addChild(sprite,2);  
  102.     sprite->setPosition(ccp(size.width/2+70,size.height/2));  
  103.     CCActionInterval *newaction=CCMoveTo::create(13,ccp(size.width/2-120,size.height/2));  //设置动作,移动到指定位置  
  104.     sprite->runAction(CCRepeatForever::create(newaction));        //执行动作  
  105.       
  106.     setTouchEnabled(true);          //设置接收触摸事件  
  107.     CCSpriteBatchNode *batchsprite=CCSpriteBatchNode::create("grossini_dance_atlas.png", 50);  //设置精灵批处理,预计产生50个精灵  
  108.     this->addChild(batchsprite,2,11);  
  109.     batchsprite->setPosition(ccp(size.width/2,size.height/2));  
  110.     CCSprite *sprite1=CCSprite::createWithTexture(batchsprite->getTexture(),CCRectMake(x, y, 85, 121));  
  111.     CCSprite *sprite2=CCSprite::createWithTexture(batchsprite->getTexture(),CCRectMake(0, 0, 85, 121));  
  112.     this->addChild(sprite1);  
  113.     this->addChild(sprite2);  
  114.     sprite2->setPosition(ccp(size.width/2, size.height/2));  
  115.     //sprite1->  
  116.     CCActionInterval* action;  
  117.     float random = CCRANDOM_0_1();  
  118.       
  119.     if( random < 0.20 )  
  120.         action = CCScaleBy::create(3, 2);  
  121.     else if(random < 0.40)  
  122.         action = CCRotateBy::create(3, 360);  
  123.     else if( random < 0.60)  
  124.         action = CCBlink::create(1, 3);  
  125.     else if( random < 0.8 )  
  126.         action = CCTintBy::create(2, 0, -255, -255);  
  127.     else  
  128.         action = CCFadeOut::create(2);  
  129.     //sprite1->runAction(action);  
  130.     CCFiniteTimeAction *actionback=CCSequence::create(action,action->reverse(),NULL);  //设置动作集合,顺序依次执行  
  131.     sprite1->runAction(CCRepeat::create(actionback,6));       //重复6次执行动作  
  132.       
  133.     CCActionInterval* action1=CCFadeIn::create(2);  
  134.     CCActionInterval* action2=CCJumpTo::create(2, CCPointMake(300, 0), 80, 5);  
  135.     sprite1->runAction(CCSequence::create(action1,action1->reverse(),NULL));  
  136.     sprite2->runAction(CCRepeatForever::create(action2));  
  137.       
  138.     CCSprite *sprite3=CCSprite::create("grossini_dance_atlas.png",CCRectMake(0, 0, 85, 121));  
  139.     addChild(sprite3);  
  140.     CCPointArray *array=CCPointArray::create(20);   //创建点集合  
  141.     array->addControlPoint(ccp(0,0));  
  142.     array->addControlPoint(ccp(size.width/2-30,0));  
  143.     array->addControlPoint(ccp(size.width/2-30,size.height-80));  
  144.     array->addControlPoint(ccp(0,size.height-80));  
  145.     array->addControlPoint(ccp(0,0));  
  146.     CCCardinalSplineBy *action3=CCCardinalSplineBy::create(3 ,array, 2);  //在三秒内在这几个点之间来回,最后一个参数为张力,1为正方形,大于1为内陷的正方形,小于1为外凸的正方形(内陷外凸是针对直线来说的)  
  147.     CCActionInterval *reverserv=action3->reverse();  
  148.     CCFiniteTimeAction *seq=CCSequence::create(action3,reverserv,NULL);  
  149.     sprite3->runAction(CCRepeat::create(seq,5));  
  150.       
  151.       
  152.     CCSprite *sprite4=CCSprite::create("grossini_dance_atlas.png",CCRectMake(0, 0, 85, 121));  
  153.     addChild(sprite4,2);  
  154.     CCAction *action4=CCSpawn::create(CCJumpBy::create(9,CCPointMake(300, 0) ,50 , 50),CCRotateBy::create(9, 720),NULL);//动作集合,同时执行  
  155.     sprite4->runAction(action4);  
  156.       
  157.     return true;  
  158.       
  159. }  
  160. void MyButton::menuCallback(CCLayer *pSender)  
  161. {  
  162.       
  163. }  
  164. void MyButton::menuCloseCallback1(CCLayer *pSender)  
  165. {  
  166.     CCMenu* menu = (CCMenu*)(((CCNode*)(pSender))->getParent());  
  167.     GLubyte opacity = menu->getOpacity();  
  168.     if( opacity == 128 )  
  169.         menu->setOpacity(255);  
  170.     else  
  171.         menu->setOpacity(128);  
  172. }  
  173. void MyButton::menuCloseCallback2(CCLayer *pSender)  
  174. {  
  175.     CCMenuItemImage *image=(CCMenuItemImage*)pSender->getParent()->getChildByTag(2);  
  176.     if(image->isEnabled())  
  177.     {  
  178.         image->setEnabled(false);  
  179.     }  
  180.     else  
  181.     {  
  182.         image->setEnabled(true);  
  183.   
  184.     }  
  185. }  
  186. void MyButton::menuCloseCallback3(CCLayer *pSender)  
  187. {  
  188.     float kwidth=pSender->getScale();  
  189.     if(kwidth<=1.0)  
  190.     {  
  191.         pSender->setScale(2*kwidth);  
  192.     }  
  193.     else  
  194.     {  
  195.         pSender->setScale(kwidth/2);  
  196.     }  
  197. }  
  198. void MyButton::menuCloseCallback4(CCLayer *pSender)  
  199. {  
  200.     float tmpskew=pSender->getSkewX();  
  201.     if(tmpskew==0)  
  202.     {  
  203.         pSender->setSkewX(-45);  
  204.     }  
  205.     else   
  206.     {  
  207.         pSender->setSkewX(45);  
  208.        // pSender->setSkewY(0);  
  209.     }  
  210.       
  211. }  
  212. void MyButton::menuCloseCallback5(CCLayer *pSender)  
  213. {  
  214.       
  215.     CCMenuItemFont *newfont=CCMenuItemFont::create("点击继续",(CCMenu*)pSender->getParent(),menu_selector(MyButton::menuCloseCallback6) );  
  216.     newfont->setColor(ccc3(255, 0, 0));  
  217.     newfont->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width/2,CCDirector::sharedDirector()->getWinSize().height/2));  
  218.     CCMenu *newmenu=CCMenu::create(newfont,NULL);  
  219.     this->addChild(newmenu,3);  
  220.     CCMenu *menu=(CCMenu*)pSender->getParent();  
  221.     menu->setEnabled(false);  
  222.     menu->setOpacity(128);  
  223.       
  224. }  
  225. void MyButton::menuCloseCallback6(CCLayer *pSender)  
  226. {  
  227.     CCMenuItemFont *font=(CCMenuItemFont*)pSender;  
  228.     //font->setColor(ccc3(255, 255, 255));  
  229.     CCMenu *clicked=(CCMenu*)this->getParent()->getChildByTag(20);  
  230.     clicked->setOpacity(255);  
  231.     clicked->setEnabled(true);  
  232.     font->setVisible(false);  
  233.     //CCDirector::sharedDirector()->resume();  
  234. }  
  235. CCScene* MyButton::scene()  
  236. {  
  237.     CCScene *scene=CCScene::create();  
  238.     CCLayer *layer=MyButton::create();  
  239.     scene->addChild(layer);  
  240.     return scene;  
  241. }  
  242. void MyButton::menuCloseCallback(cocos2d::CCLayer *pSender)  
  243. {  
  244.     CCDirector::sharedDirector()->end();  
  245. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)  
  246.     exit(0);  
  247. #endif  
  248.     CCLog("点击过了");  
  249. }  
  250.   
  251. bool mySprite::init()  
  252. {  
  253.     CCSize size=CCDirector::sharedDirector()->getWinSize();  
  254.     int idx=(int )(CCRANDOM_0_1()*1400/100);  
  255.     int x=(idx%5)*85;  
  256.     int y= (idx/5)*121;  
  257.     CCSprite *sprite=CCSprite::create("grossini_dance_atlas.png",CCRectMake(x, y, 85, 121));  
  258.     this->addChild(sprite,2);  
  259.     sprite->setPosition(ccp(size.width/2,size.height/2));  
  260. }  
  261.   
  262. //欢迎转载,转载请注明出处:<a target="_blank" href="http://blog.csdn.net/somestill/article/details/9412111">http://blog.csdn.net/somestill/article/details/9412111</a>  



from: http://blog.csdn.net/somestill/article/details/9412111

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值