1. 圆形音量button

事实上作者的本意应该是叫做“电位计button”。可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果:

好了,不多解释,本篇到此为止。

(旁白: 噗。就这样结束了?)

啊才怪~我们来看看代码:

  1. CCControlPotentiometer* potentiometer = CCControlPotentiometer::create(  
  2.         "potentiometerTrack.png",  
  3.         "potentiometerProgress.png",  
  4.         "potentiometerButton.png");  
  5.   
  6.     potentiometer->setPosition(ccp(100, 200));  
  7.   
  8.     this->addChild(potentiometer);  

 

一个音量button由三部分构成:底座、进度条、控制button

       

然后我觉得上面这段代码就不须要解释了~

创建好音量button之后。它就具备了调节音量的功能,把鼠标放在控制button上拖动一下。粉红色的进度条就会改变显示范围。也就是音量大小。

而游戏的音量也会随之添加或减小...啊个屁啊!

才不会改变音量呢。开开玩笑而已,想改变音量?也能够,button肯定少不了监听事件的。少了监听事件那它就不可能被承认是一个button。(旁白:你好烦...)

  1. void HelloWorld::controlPotentiometerTest()  
  2. {  
  3.     CCControlPotentiometer* potentiometer = CCControlPotentiometer::create(  
  4.         "potentiometerTrack.png",  
  5.         "potentiometerProgress.png",  
  6.         "potentiometerButton.png");  
  7.   
  8.     potentiometer->setPosition(ccp(100, 200));  
  9.   
  10.     this->addChild(potentiometer);  
  11.   
  12.     /* 监听进度值改变事件 */  
  13.     potentiometer->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::onValueChange), CCControlEventValueChanged);  
  14. }  
  15.   
  16. void HelloWorld::onValueChange( CCObject* pSender, CCControlEvent event )  
  17. {  
  18.     CCControlPotentiometer* potentiometer = (CCControlPotentiometer* )pSender;  
  19.     CCString* valueStr = CCString::createWithFormat("%f", potentiometer->getValue());  
  20.     CCLOG(valueStr->getCString());  
  21. }  

 

太好了,加入监听事件的方式和CCControlButton是一样的,仅仅只是事件类型变成了CCControlEventValueChanged。

我们仅仅须要在监听事件的回调函数里调用CCControlPotentiometer的getValue函数就能够获得当前音量button的音量值了~OK,不多说了~

2. 另外

通过拉动可旋转的button,从而改变所代表的值,这个效果的确是非常棒的,但。和我的需求有一些区别,先贴上我实现的效果吧

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc29tZXN0aWxs/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="126" height="158" alt="" style="border:none;" /> 
                       

     先看先第一张图。头像围绕的进度条从0開始,直到最后显示效果如第二张图所看到的,整个过程採用定时器来完毕,和演示样例中的通过手拖动旋转button表面上不同(头像没有旋转),事实上,原理是一样的。那张头像只是是放到上面的,头像以下仍有一个旋转的图片。仅仅是我们看不到而已,来看下代码吧

声明文件:

  1. #ifndef __loading__Potentiometer__  
  2. #define __loading__Potentiometer__  
  3.   
  4. #include <iostream>  
  5. #include "cocos-ext.h"  
  6. #include "cocos2d.h"  
  7. USING_NS_CC;  
  8. class Potentiometer :public cocos2d::extension::CCControlPotentiometer  
  9. {  
  10. public:  
  11.     bool init();  
  12.     static CCScene *scene();  
  13.     CREATE_FUNC(Potentiometer);  
  14.     void valueChange(CCObject* pSender, cocos2d::extension::CCControlEvent event );  
  15.     CCControlPotentiometer *poten;  
  16. };  
  17.   
  18. #endif  

声明文件比較简单,定义了一个对象以及一个回调函数。

定义部分:

  1. #include "Potentiometer.h"  
  2. #include "cocos2d.h"  
  3. bool Potentiometer::init()  
  4. {  
  5.     if(!CCControlPotentiometer::init())  
  6.     {  
  7.         return false;  
  8.     }  
  9.     CCSize size=CCDirector::sharedDirector()->getWinSize();  
  10.     CCSprite *bg=CCSprite::create("fullbg.png");  
  11.     this->addChild(bg);  
  12.     bg->setPosition(ccp(size.width/2, size.height/2));     //參数为:整个背景框,头像周围的进度条,以及旋转button  
  13.     poten=CCControlPotentiometer::create("turn_bg.png", "turn_timer.png", "switch-thumb.png");  
  14.     this->addChild(poten,1);  
  15.     CCSprite *head=CCSprite::create("default_head_pic.png");  //加入头像,使其遮挡旋转button  
  16.     this->addChild(head,1);  
  17.     head->setPosition(ccp(size.width/2, size.width/2));  
  18.     poten->setPosition(ccp(size.width/2, size.width/2));  
  19. //    poten->setMaximumValue(1.0f);      //设置可旋转的最大值。默觉得1  
  20. //    poten->setMinimumValue(0.0f);      // 设置可旋转的最小值。默觉得0  
  21.     //poten->setValue(0.1f);  
  22.     schedule(schedule_selector(Potentiometer::valueChange),1);   //加入回调事件。和以下屏蔽的一行效果同样,每隔一秒调用一次指定函数  
  23.     //CCDirector::sharedDirector()->getScheduler()->scheduleSelector(SEL_SCHEDULE(&Potentiometer::valueChange), this, 1, false);  
  24.     return true;  
  25. }  
  26. CCScene *Potentiometer::scene()  
  27. {  
  28.     CCScene *scene=CCScene::create();  
  29.     Potentiometer *layer=Potentiometer::create();  
  30.     scene->addChild(layer);  
  31.     return scene;  
  32. }  
  33. void Potentiometer::valueChange(CCObject *pSender, cocos2d::extension::CCControlEvent event)  
  34. {  
  35.     float tmp=poten->getValue()+0.1f;    //获得当前值(浮点型)并加0.1  
  36.     poten->setValue(tmp);  
  37.     if(tmp>=1)     //假设值达到最大,则停止定时器  
  38.     {  
  39.         //CCDirector::sharedDirector()->getScheduler()->unscheduleSelector(SEL_SCHEDULE(&Potentiometer::valueChange), this);  
  40.         unschedule(schedule_selector(Potentiometer::valueChange));    // 效果和上面一行同样  
  41.     }  
  42. }  

Cocos2d-x CCControlPotentiometer之圆形音量button及特效的更多相关文章

  1. Android 阴影,圆形的Button

    MainActivity.java package com.kale.gridlayout; import android.app.Activity; import android.graphics. ...

  2. html点击圆形扩散显示界面特效

    开场白 效果 用到的核心代码 思考 探索 源码 兼容性问题 开场白 经常看到某些app有点击扩散的特效,有些当做扩散显示界面,有些扩散改变主题颜色,想在网页上实现一下,所以就有了这个. 效果 不想听逼 ...

  3. cocos2d-x特效之CCControlPotentiometer

    在test示例下面,有一个关于此功能的代码,实现的效果如下: 通过拉动可旋转的按钮,从而改变所代表的值,这个效果的确是很棒的,但,和我的需求有一些差别,先贴上我实现的效果吧               ...

  4. IOS之按钮控件--Button全解析及使用 分类: ios技术 2015-01-17 17:09 169人阅读 评论(0) 收藏

    IOS开发中伴随我们始终的 最常用的几个空间之一 -- UIButton 按钮,对于button今天在此做一些浅析,并介绍下主流用法以及常见问题解决办法. 首先是继承问题,UIButton继承于UIC ...

  5. 控制 MediaElement(播放、暂停、停止、音量和速度)

    控制 MediaElement(播放.暂停.停止.音量和速度) WPF中对于多媒体的支持非常完整,一般都是通过MediaElement来实现的. http://msdn.microsoft.com/z ...

  6. COCOS学习笔记--Button类及其相关控件属性

    一.Button介绍 Button就是button.Cocos中提供了Button类对button进行相关的操作.我们看一下Button类继承关系图: 能够看到.Button是继承自Widget类,W ...

  7. CCControlExtension/CCControlPotentiometer

    #ifndef __CCCONTROLPOTENTIOMETER_H__ #define __CCCONTROLPOTENTIOMETER_H__ #include "CCControl.h ...

  8. //点击按钮加减音频音量到最小会出现bug什么意思???

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Android自定义控件View(三)组合控件

    不少人应该见过小米手机系统音量控制UI,一个圆形带动画效果的音量加减UI,效果很好看.它是怎么实现的呢?这篇博客来揭开它的神秘面纱.先上效果图 相信很多人都知道Android自定义控件的三种方式,An ...

随机推荐

  1. 【NET CORE微服务一条龙应用】应用部署

    简介 系列目录:[NET CORE微服务一条龙应用]开始篇与目录 本章主要介绍https://github.com/q315523275/FamilyBucket上微服务一条龙应用,在实际使用中的应用 ...

  2. S5PV210 串口实验(中断方式)

    结合之前的串口实验(轮询方式)与中断体系分析,我们来做下中断方式的串口接收实验. start.S .global _start .global IRQ_handle _start: /* 关 Watc ...

  3. AngularJS+Ionic开发-2.项目结构介绍

    使用上篇博客<开发环境搭建>中的命令创建完成IonicHelloWorld项目,在VSCode中的左侧,显示该项目的结构信息,如下图所示: 1 .sourcesmaps文件夹 调试状态的j ...

  4. iis 站点中文乱码 解决方案

    问题描述:iis乱码问题 1:在vs里开发没问题,发布后用发布文件替换iis文件没问题,但是如果用fis3发布后导致iis站点访问时出现部分中文乱码 原理:文件编码格式不统一 解决方案: 四个步骤解决 ...

  5. Spark中master与worker的进程RPC通信实现

    1.构建master的actor package SparkRPC import akka.actor.{Actor, ActorSystem, Props}import com.typesafe.c ...

  6. nginx简单使用配置

    使用nginx首先要明确使用场景,这里是一台服务器实现多种类型访问:网站首页访问,GitLab访问,note(私人springboot项目),静态文件访问. 下面是一份配置文件 nginx.conf, ...

  7. Java - 线程池设计与选择

    http://ifeve.com/how-to-calculate-threadpool-size/ 任务一般可分为:CPU密集型.IO密集型.混合型,对于不同类型的任务需要分配不同大小的线程池. C ...

  8. jsp使用servlet实现用户登录 及动态验证码

    在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等... 现在,我将讲述通过servlet实现验证码: 验证码作为一个图片,在页面中为“画”出来的, ...

  9. 教你读懂vue源码技术教程

    由于 Vue 的源码采用 ES6,所以你至少应该掌握 ES6 才能看得懂,其次你最好对 package.json 中的字段的作用有所了解.由于 Vue 使用 Rollup 构建,所以你不了解 Roll ...

  10. 第一个React Native程序踩到的那些坑

    毫不夸张的说用React Native写一个Hello World !程序是我碰到最复杂的Hello World.网络上的有关的环境搭建相关的文档也很多,但是总是有这样那样的问题. 官方中文版的安装文 ...