zoukankan      html  css  js  c++  java
  • cocos2d-x特效之CCControlPotentiometer

    在test示例下面,有一个关于此功能的代码,实现的效果如下:


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

                             

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

    声明文件:

    #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));     //参数为:整个背景框,头像周围的进度条,以及旋转按钮
        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));    // 效果和上面一行相同
        }
    }
    



  • 相关阅读:
    POJ 1003 解题报告
    POJ 1004 解题报告
    POJ-1002 解题报告
    vi--文本编辑常用快捷键之光标移动
    常用图表工具
    September 05th 2017 Week 36th Tuesday
    September 04th 2017 Week 36th Monday
    September 03rd 2017 Week 36th Sunday
    September 02nd 2017 Week 35th Saturday
    September 01st 2017 Week 35th Friday
  • 原文地址:https://www.cnblogs.com/james1207/p/3281303.html
Copyright © 2011-2022 走看看