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

好了,不多解释,本篇到此为止。
(旁白: 噗。就这样结束了?)
啊才怪~我们来看看代码:
- CCControlPotentiometer* potentiometer = CCControlPotentiometer::create(
- "potentiometerTrack.png",
- "potentiometerProgress.png",
- "potentiometerButton.png");
- potentiometer->setPosition(ccp(100, 200));
- this->addChild(potentiometer);
一个音量button由三部分构成:底座、进度条、控制button
然后我觉得上面这段代码就不须要解释了~
创建好音量button之后。它就具备了调节音量的功能,把鼠标放在控制button上拖动一下。粉红色的进度条就会改变显示范围。也就是音量大小。
而游戏的音量也会随之添加或减小...啊个屁啊!
才不会改变音量呢。开开玩笑而已,想改变音量?也能够,button肯定少不了监听事件的。少了监听事件那它就不可能被承认是一个button。(旁白:你好烦...)
- void HelloWorld::controlPotentiometerTest()
- {
- CCControlPotentiometer* potentiometer = CCControlPotentiometer::create(
- "potentiometerTrack.png",
- "potentiometerProgress.png",
- "potentiometerButton.png");
- potentiometer->setPosition(ccp(100, 200));
- this->addChild(potentiometer);
- /* 监听进度值改变事件 */
- potentiometer->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::onValueChange), CCControlEventValueChanged);
- }
- void HelloWorld::onValueChange( CCObject* pSender, CCControlEvent event )
- {
- CCControlPotentiometer* potentiometer = (CCControlPotentiometer* )pSender;
- CCString* valueStr = CCString::createWithFormat("%f", potentiometer->getValue());
- CCLOG(valueStr->getCString());
- }
太好了,加入监听事件的方式和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表面上不同(头像没有旋转),事实上,原理是一样的。那张头像只是是放到上面的,头像以下仍有一个旋转的图片。仅仅是我们看不到而已,来看下代码吧
声明文件:
- #ifndef __loading__Potentiometer__
- #define __loading__Potentiometer__
- #include <iostream>
- #include "cocos-ext.h"
- #include "cocos2d.h"
- USING_NS_CC;
- class Potentiometer :public cocos2d::extension::CCControlPotentiometer
- {
- public:
- bool init();
- static CCScene *scene();
- CREATE_FUNC(Potentiometer);
- void valueChange(CCObject* pSender, cocos2d::extension::CCControlEvent event );
- CCControlPotentiometer *poten;
- };
- #endif
声明文件比較简单,定义了一个对象以及一个回调函数。
定义部分:
- #include "Potentiometer.h"
- #include "cocos2d.h"
- bool Potentiometer::init()
- {
- if(!CCControlPotentiometer::init())
- {
- return false;
- }
- CCSize size=CCDirector::sharedDirector()->getWinSize();
- CCSprite *bg=CCSprite::create("fullbg.png");
- this->addChild(bg);
- bg->setPosition(ccp(size.width/2, size.height/2)); //參数为:整个背景框,头像周围的进度条,以及旋转button
- poten=CCControlPotentiometer::create("turn_bg.png", "turn_timer.png", "switch-thumb.png");
- this->addChild(poten,1);
- CCSprite *head=CCSprite::create("default_head_pic.png"); //加入头像,使其遮挡旋转button
- this->addChild(head,1);
- head->setPosition(ccp(size.width/2, size.width/2));
- poten->setPosition(ccp(size.width/2, size.width/2));
- // poten->setMaximumValue(1.0f); //设置可旋转的最大值。默觉得1
- // poten->setMinimumValue(0.0f); // 设置可旋转的最小值。默觉得0
- //poten->setValue(0.1f);
- schedule(schedule_selector(Potentiometer::valueChange),1); //加入回调事件。和以下屏蔽的一行效果同样,每隔一秒调用一次指定函数
- //CCDirector::sharedDirector()->getScheduler()->scheduleSelector(SEL_SCHEDULE(&Potentiometer::valueChange), this, 1, false);
- return true;
- }
- CCScene *Potentiometer::scene()
- {
- CCScene *scene=CCScene::create();
- Potentiometer *layer=Potentiometer::create();
- scene->addChild(layer);
- return scene;
- }
- void Potentiometer::valueChange(CCObject *pSender, cocos2d::extension::CCControlEvent event)
- {
- float tmp=poten->getValue()+0.1f; //获得当前值(浮点型)并加0.1
- poten->setValue(tmp);
- if(tmp>=1) //假设值达到最大,则停止定时器
- {
- //CCDirector::sharedDirector()->getScheduler()->unscheduleSelector(SEL_SCHEDULE(&Potentiometer::valueChange), this);
- unschedule(schedule_selector(Potentiometer::valueChange)); // 效果和上面一行同样
- }
- }
Cocos2d-x CCControlPotentiometer之圆形音量button及特效的更多相关文章
- Android 阴影,圆形的Button
MainActivity.java package com.kale.gridlayout; import android.app.Activity; import android.graphics. ...
- html点击圆形扩散显示界面特效
开场白 效果 用到的核心代码 思考 探索 源码 兼容性问题 开场白 经常看到某些app有点击扩散的特效,有些当做扩散显示界面,有些扩散改变主题颜色,想在网页上实现一下,所以就有了这个. 效果 不想听逼 ...
- cocos2d-x特效之CCControlPotentiometer
在test示例下面,有一个关于此功能的代码,实现的效果如下: 通过拉动可旋转的按钮,从而改变所代表的值,这个效果的确是很棒的,但,和我的需求有一些差别,先贴上我实现的效果吧 ...
- IOS之按钮控件--Button全解析及使用 分类: ios技术 2015-01-17 17:09 169人阅读 评论(0) 收藏
IOS开发中伴随我们始终的 最常用的几个空间之一 -- UIButton 按钮,对于button今天在此做一些浅析,并介绍下主流用法以及常见问题解决办法. 首先是继承问题,UIButton继承于UIC ...
- 控制 MediaElement(播放、暂停、停止、音量和速度)
控制 MediaElement(播放.暂停.停止.音量和速度) WPF中对于多媒体的支持非常完整,一般都是通过MediaElement来实现的. http://msdn.microsoft.com/z ...
- COCOS学习笔记--Button类及其相关控件属性
一.Button介绍 Button就是button.Cocos中提供了Button类对button进行相关的操作.我们看一下Button类继承关系图: 能够看到.Button是继承自Widget类,W ...
- CCControlExtension/CCControlPotentiometer
#ifndef __CCCONTROLPOTENTIOMETER_H__ #define __CCCONTROLPOTENTIOMETER_H__ #include "CCControl.h ...
- //点击按钮加减音频音量到最小会出现bug什么意思???
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Android自定义控件View(三)组合控件
不少人应该见过小米手机系统音量控制UI,一个圆形带动画效果的音量加减UI,效果很好看.它是怎么实现的呢?这篇博客来揭开它的神秘面纱.先上效果图 相信很多人都知道Android自定义控件的三种方式,An ...
随机推荐
- 使用Asp.Net Core MVC 开发项目实践[第五篇:缓存的使用]
项目中我们常常会碰到一些数据,需要高频率用到但是又不会频繁变动的这类,我们就可以使用缓存把这些数据缓存起来(比如说本项目的导航数据,帖子频道数据). 我们项目中常用到有Asp.Net Core 本身提 ...
- angularjs学习第八天笔记(指令作用域研究)
您好,在前两天对指令的简单了解和系统指令学习后 今天主要研究其指针作用域的相关事情 每一个指令在创建时,其实就构成了自己的一个小的模块单元. 其对于的模块单元都有着其对于的作用域,其中作用域一般有两种 ...
- c# 封装 Request操作类
/// <summary> /// 判断当前页面是否接收到了Post请求 /// </summary> /// <returns>是否接收到了Post请求</ ...
- http请求的headers详解
关于http请求的headers详解:这里以HTTP1.1为例结合postman返回的信息 1.Server →nginx/1.15.8 A name for the server 这是post ...
- 【Spring】25、Spring代理。 BeanNameAutoProxyCreator 与 ProxyFactoryBean
一般我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置文件的 ...
- elasticsearch安装之各种坑
我用的是centos6.5,安装elasticsearch5.2.0 首先不说了,安装JDK1.8,下载elasticsearch5.2.0 https://www.elastic.co/downlo ...
- HDU2196(SummerTrainingDay13-D tree dp)
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- Python全栈学习_day001知识点
今日大纲: . 变量. ***** . 常量.** . 注释.*** . 基础数据类型初识(int,str,bool). ***** . 用户输入 input ***** . 流程控制语句if. ** ...
- The Minimum Cycle Mean in a Digraph 《有向图中的最小平均权值回路》 Karp
文件链接 Karp在1977年的论文,讲述了一种\(O(nm)\)的算法,用来求有向强连通图中最小平均权值回路(具体问题请参照这里) 本人翻译(有删改): 首先任取一个节点 \(s\) ,定义 \(F ...
- 微信小程序Map组件踩坑日记
刚刚又发生一个bug,搞得我头皮发麻,本来该美滋滋的回家准备度过愉快的周末,瞬间变成了日常修bug,来,开始填坑之路 情景再现: 首先说一说我们项目的需求, 点击下方,弹出抽屉 点击对应的地图打开相应 ...