Cocos2d-x3.1下實作類別似iOS頁面滑動指示圓點

來源:互聯網
上載者:User

標籤:c++   cocos2dx   頁面滑動   指示   圓點   

原文地址:http://blog.csdn.net/qqmcy/article/details/37612457

代碼下載:http://download.csdn.net/detail/qqmcy/7613835

SliderIndicatorLayout.h

////  SliderIndicatorLayout.h//  ht_mobile_cpp////  Created by 杜甲 on 14-7-9.////#ifndef __ht_mobile_cpp__SliderIndicatorLayout__#define __ht_mobile_cpp__SliderIndicatorLayout__#include "cocos2d.h"#include "ui/CocosGUI.h"USING_NS_CC;class SliderIndicatorLayout:public ui::Layout{    public:        CREATE_FUNC(SliderIndicatorLayout);        virtual bool init();    //添加指示圓點個數    void addIndicator(int num);    //選中的第幾個    void changeIndicator(int index);            private:    Size winSize;    float radius;        };#endif /* defined(__ht_mobile_cpp__SliderIndicatorLayout__) */

SliderIndicatorLayout.cpp

////  SliderIndicatorLayout.cpp//  ht_mobile_cpp////  Created by 杜甲 on 14-7-9.////#include "SliderIndicatorLayout.h"#include "SliderIndicator.h"bool SliderIndicatorLayout::init(){    bool bRet = false;    do {        CC_BREAK_IF(!ui::Layout::init());                setLayoutType(cocos2d::ui::Layout::Type::VERTICAL);        winSize = Director::getInstance()->getWinSize();                radius = winSize.height / 130;                bRet = true;    } while (0);    return bRet;}void SliderIndicatorLayout::addIndicator(int num){    setSize(Size(radius * 2, radius*3 * num));    for (int i = 0 ; i < num; i++)    {        auto indicator = SliderIndicator::create();        indicator->setSize(Size(radius, radius));        indicator->setCircleColor(Color4B(255, 40, 255, 255));        indicator->setTag(i);        addChild(indicator);                auto lp_indicator = ui::LinearLayoutParameter::create();        lp_indicator->setGravity(cocos2d::ui::LinearLayoutParameter::LinearGravity::TOP);        lp_indicator->setMargin(ui::Margin(0,radius * 2.0f,0,0));        if (i == 0)        {             lp_indicator->setMargin(ui::Margin(0, 0,0,0));                    }        indicator->setLayoutParameter(lp_indicator);            }    changeIndicator(0);}void SliderIndicatorLayout::changeIndicator(int index){    for (int i = 0; i < getChildren().size(); i++)    {        auto indicator = dynamic_cast<SliderIndicator*>(getChildByTag(i));        indicator->setCircleColor(Color4B(255, 40, 255, 25));        if (i == index)        {            indicator->setCircleColor(Color4B(255, 40, 255, 255));        }            }        }

SliderIndicator.h

////  SliderIndicator.h//  ht_mobile_cpp////  Created by 杜甲 on 14-7-9.////#ifndef __ht_mobile_cpp__SliderIndicator__#define __ht_mobile_cpp__SliderIndicator__#include "cocos2d.h"#include "ui/CocosGUI.h"USING_NS_CC;class SliderIndicator:public ui::Layout{public:        CREATE_FUNC(SliderIndicator);        virtual bool init();     CC_SYNTHESIZE(Color4B, _circleColor, CircleColor);        protected:        void onDraw(const Mat4 &transform, bool transformUpdated);    void draw(Renderer *renderer, const Mat4 &transform, bool transformUpdated);        CustomCommand _customCommand;};#endif /* defined(__ht_mobile_cpp__SliderIndicator__) */

SliderIndicator.cpp

////  SliderIndicator.cpp//  ht_mobile_cpp////  Created by 杜甲 on 14-7-9.////#include "SliderIndicator.h"bool SliderIndicator::init(){    bool bRet = false;    do {        CC_BREAK_IF(!ui::Layout::init());                                        bRet = true;    } while (0);    return bRet;}void SliderIndicator::draw(Renderer *renderer, const Mat4 &transform, bool transformUpdated){        _customCommand.init(_globalZOrder);    _customCommand.func = CC_CALLBACK_0(SliderIndicator::onDraw, this,transform,transformUpdated);    renderer->addCommand(&_customCommand);    }void SliderIndicator::onDraw(const cocos2d::Mat4 &transform, bool transformUpdated){     Director* director = Director::getInstance();    CCASSERT(nullptr != director, "Director is null when seting matrix stack");    director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);    director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, transform);        DrawPrimitives::setDrawColor4B(_circleColor.r, _circleColor.g, _circleColor.b, _circleColor.a);        DrawPrimitives::drawSolidCircle( Vec2(0,0), director->getWinSize().height / 130, CC_DEGREES_TO_RADIANS(90), 50, 1.0f, 1.0f);        //end draw    director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.