Cocos2d-x Ver 3.x PageViewの作成

参考にしたページ:「Cocos2d-x 3.0 PageViewを試してみる」を更に実用的に改造してみました。これだと十分に使えると思います。
いいサンプルを使わせていただきました。

Cocos2dx 3.x C++言語

PageViewScene.hを次のように変更してみてください。

#ifndef __PageView__PageViewScene__

#define __PageView__PageViewScene__


#include "cocos2d.h"

#include <ui/CocosGUI.h>


class PageViewScene : public cocos2d::Layer

{

    public :

    static cocos2d::Scene* createScene();

    virtual bool init();

    CREATE_FUNC(PageViewScene);

    

    void pageviewCallBack(cocos2d::Ref * psender, cocos2d::ui::PageViewEventType type);

};


#endif /* defined(__PageView__PageViewScene__) */


PageViewScene.cppを次のように変更してみてください。

#include "PageViewScene.h"



USING_NS_CC;

using namespace ui;


Scene* PageViewScene::createScene()

{

    auto scene = Scene::create();

    auto layer = PageViewScene::create();

    scene->addChild(layer);

    return scene;

}


// on "init" you need to initialize your instance

bool PageViewScene::init()

{

    //初期化

    if ( !Layer::init() ) return false;

    

    //画面サイズを取得

    auto windowSize = Director::getInstance()->getWinSize();

    

    //PageViewを作成これにレイアウトを追加していく

    auto pageView = PageView::create();

    pageView->setTouchEnabled(true);

    pageView->setSize(windowSize);

    

    //40ページ作成する

    for (int i = 0; i < 40; i++) {

        

        //レイアウトを作成

        auto layout = Layout::create();

        layout->setSize(windowSize);

        

        // バックグランドカラー

        auto background = LayerColor::create(Color4B::WHITE,

                                             windowSize.width,

                                             windowSize.height);

        

        // バックグランドカラー 第2引数は表示順

        this->addChild(background, 0);

        

        //テキスト

        auto label = Text::create(StringUtils::format("%dページ",(i+1)), "Arial", 100);

        label->setColor(Color3B(Color3B::BLUE));

        label->setPosition(Vec2(layout->getContentSize().width / 2,

                                layout->getContentSize().height / 2));

        layout->addChild(label);

        

        //レイアウトをaddする

        pageView->addPage(layout);

    }

    

    //イベントリスナーを追加(using namespace ui; しないと参照出来ないので注意)

    pageView->addEventListenerPageView

                    (this, pagevieweventselector(PageViewScene::pageviewCallBack));


    this->addChild(pageView);

    

    return true;

}


//コールバック

void PageViewScene::pageviewCallBack(Ref* sender, PageViewEventType type)

{

    if(type == PAGEVIEW_EVENT_TURNING){

        auto pageView = dynamic_cast<PageView*>(sender);

        //選択されているページをログに出力

        log("%ld",pageView->getCurPageIndex() + 1);

    }

}

 

GitHub PageView_Cocos2d-X

 

目 次