您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x特效之CCControlPotentiometer

2015-09-01 16:09 369 查看
在test示例下面,有一个关于此功能的代码,实现的效果如下:



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






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

声明文件:

[cpp] view
plaincopy

#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

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

定义部分:

[cpp] view
plaincopy

#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)); //参数为:整个背景框,头像周围的进度条,以及旋转按钮

poten=CCControlPotentiometer::create("turn_bg.png", "turn_timer.png", "switch-thumb.png");

this->addChild(poten,1);

CCSprite *head=CCSprite::create("default_head_pic.png"); //添加头像,使其遮挡旋转按钮

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)); // 效果和上面一行相同

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: