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

2023-11-06

[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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cocos2d-x学习笔记—图片按钮 的相关文章

  • c++命名空间

    介绍C 命名空间的一篇文章 刚刚学C 的时候 我被满篇的域作用符号 都搞晕了 这篇文章终于让我熟悉了C 的命名空间 为什么需要命名空间 如何使用命名空间 当然 觉得java的import机制更加优雅 至少没有满篇的域作用符 一 为什么需要命
  • Java中Static关键字的使用

    1 Static关键字的用途 1 1 Static修饰成员变量 1 1 1 Static修饰成员变量的需求 当我们在代码中出现一个成员变量在我们每次创建不同的对象时 所赋值都一样 我们就可以把它放在一个公共区域内 不管几个对象都可以操作使用
  • Arduino+sim800C家居安防火灾报警 拨打电话 发送短信例程程序

    家居安防报警器 参考程序 火灾报警 涉及用sim800c发短信 拨打电话通知 接线 Sim800c 3 3V gt Arduino 3 3V Sim800c GND gt Arduino GND Sim800c RX gt Arduino
  • BES2300x笔记(24) -- 如何进行软件加密保护

    哈喽大家好 这是该系列博文的第二十四篇 篇 lt lt 系列博文索引 快速通道 gt gt 以下内容基于原厂提供的文档整理润色 一 前言 由于当下知识产权意识的普遍淡薄 当我们开发一款产品 推向市场之后 如何能防止第三方破解代码 便成了维护

随机推荐

  • 【解决问题】idea的右上方工具栏不见了的解决办法

    前一天使用idea还正常的 第二天看idea的时候 idea右上方的工具栏不见了 截图如下 那么如何让她显示出来了呢 方案1 目标 显示在右上方 在3的前面勾选下 打钩的话就行 打钩后结果 方案2 目标 显示在左上方 在3出打钩 效果如下
  • git 清除所有untracked file

    上次合并分支的时候 出现了一些没见过的文件 有 orig等等 如下图 接下来 就是git的神奇操作命令 git clean f 将所有untracked file 一次性删除 就大功告成了
  • upf低功耗的一个简单的例子

    一 结构描述 这里是一个uart top模块里面例化了两个uart 分别给两个模块给了power switch 用于电源控制 对这两个模块分别进行隔离关断来写一个简单的upf 二 代码分析 1 电压域 create power domain
  • python闭包

    python语言中形成闭包的三个条件 缺一不可 1 必须有一个内嵌函数 函数里定义的函数 这对应函数之间的嵌套 例如下面在函数funx 里面又定义了一个funy 函数 2 内嵌函数必须引用一个定义在闭合范围内 外部函数里 的变量 内部函数引
  • [ERR] Node 192.168.1.77:7000 is not empty. Either the node already knows other nodes (check with CLU

    ERR Node 192 168 1 77 7000 is not empty Either the node already knows other nodes check with CLUSTER NODES or contains s
  • AWS大数据三种经典玩法

    目录 前言 1 AWS一站式大数据分析平台 2 让人不得不喜欢的AWS 优点 缺点 3 个人建议 4 文章说明 一 AWS大数据平台全家桶简介 1 一首 数据源 2 一尾 数据应用 3 中间 大数据体系 3 1导入组件 3 2数据处理组件
  • 我跟面试官说MySQL单表数据量不要超过两千万,面试官不信

    导读 作为一个合格的 DBA 在遇到线上单表数据量超过千万级别的时候 往往会建议用户通过分表来缩减单表数据量 当用户问为什么单表数据量不能超过千万时 DBA 往往会说 单表数据量超过千万 会影响查询性能 知其然而不知所以然 学习技术不能停留
  • rtsp采用MD5加密摘要认证的交互过程

    RTSP使用MD5加密认证代码实现 链接 https edu csdn net learn 38258 606141 spm 1003 2001 3001 4157 RTSP实时音视频传输介绍 文章中详细介绍了RTSP实时音视频传输的过程
  • 车企为何要造手机?

    去年这个时候 有一个很火的词叫 互联网造车 当时百度 小米 阿里 滴滴等互联网公司纷纷宣布造车 而今年一开年 业界又出来一个热词 叫 车企造手机 吉利宣布要投入100亿来造手机 计划于2023年推出产品 最近又传出 吉利正在收购魅族手机 蔚
  • Microsoft Dynamics CRM Server 2011安装配置

    基于公司需要 要在服务器 Server 2008 R2 上安装CRM 老板想要安装Microsoft Dynamics CRM Server 2011 于是就去微软官网上下载了试用版进行安装调试 Microsoft Dynamics CRM
  • Python: 实现评分算法(附完整源代码)

    Python 实现评分算法 附完整源代码 评分是衡量产品或服务质量的指标之一 在许多领域中 评分都是非常重要的 例如电影 饭店 应用程序等 为了将产品或服务分类以便进行比较 我们需要使用评分算法 在本篇文章中 我们将介绍如何使用Python
  • Java并行流:一次搞定多线程编程难题,让你的程序飞起来!

    前言 在日常的工作中 为了提高程序的处理速度 充分利用多核处理器的性能 我们需要手动编写多线程代码 但是多线程编程非常复杂 容易出现死锁 竞态条件等问题 给我们带来了很大的困扰 而 Java 并行流则提供了一种更加简单 易用 安全的并发编程
  • Python读取json文件

    文章目录 一 JSON文件 二 读取JSON数据 一 JSON文件 准备一个json文档数据 把对应的参数添加至此json文件下 通过python去获取对应的数据 代码如下 示例 item requests url body
  • java.lang.UnsatisfiedLinkError: 错误记录

    java lang UnsatisfiedLinkError No implementation found for int com baidu platform comjni map commonmemcache JNICommonMem
  • STM32系列(HAL库)——F103C8T6通过IIC/I2C方式读写AT24C02—(EEPROM 存储模块)

    1 软件准备 1 编程平台 Keil5 2 CubeMX 3 XCOM 串口调试助手 2 硬件准备 1 AT24C02模块 2 F1的板子 本例使用经典F103C8T6 3 ST link 下载器 4 USB TTL模块 5 杜邦线若干 3
  • 美赛论文格式基本要求

    Your Paper s Title Starts Here Please Center use Helvetica Arial 14 论文的题目从这里开始 用Helvetica Arial 14号 FULL First Author1 a
  • Java中加载配置文件的三种方式

    一 通过文件路径加载 该方式必须知道文件的真实路径 1 配置文件放置位置 2 具体代码如下 package cn sunft day01 reflect import java io FileInputStream import java
  • OpenCV源码Android端编译,用时三天,我编了个寂寞。。。

    学更好的别人 做更好的自己 微卡智享 本文长度为1526字 预计阅读4分钟 导语 全网首发微信二维码引擎Android平台移植 中有介绍OpenCV源码及扩展模块Android端的编译 其中扩展模块里的人脸细节特征点是准备要测试看看的 于是
  • vi笔记附录1--vi之配置一个强大的c语言、python IED

    vi笔记附录1 vi之配置一个强大的c语言 python IED 2020 11 07 更新 三 vim特殊使用方法 12 NERDTree NERDTreeDirArrowExpandable 报错 一 vim效果图 话不多说 想知道vi
  • cocos2d-x学习笔记—图片按钮

    cpp view plain copy button cpp buttontest include MyButtonScene h include SimpleAudioEngine h using namespace cocos2d us