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



  • 相关阅读:
    leetcode刷题 650~
    leetcode刷题 633~
    发送udp报文
    SIP (Session Initiation Protocol) 协议
    你所不知道的replace
    uni-app(六)生成海报图片路径问题
    uni-app(五)小程序的一些注意事项,踩坑
    uni-app(四)小程序里的vuex
    uni-app(三)组件、插件使用,引入字体
    uni-app(二)接口请求封装,全局输出api
  • 原文地址:https://www.cnblogs.com/james1207/p/3281303.html
Copyright © 2020-2023  润新知