とあるプログラマの備忘録

都内某所に住むプログラマが自分用に備忘録を残すという趣旨のブログです。はてなダイアリーから移動しました!

Cocos2d-x 3.0 PageViewを試してみる

未だに3.0Finalからバージョンアップしてないraharuです。
この間AVアンプ買いました、テレビとリンビングPCが同じアンプ経由で接続されているので
結構便利になりましたおすすめです。

という事で今回はPageViewを試してみます。

PageViewScene.h

#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);
};

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);
    
    //3ページ作成する
    for (int i = 0; i < 40; i++) {
        
        //レイアウトを作成
        auto layout = Layout::create();
        layout->setSize(windowSize);
        
        //画像
        auto imageView = ImageView::create("BattleSceneLayout/stage/BackGround_001.png");
        imageView->setAnchorPoint( Point::ANCHOR_BOTTOM_LEFT );
        imageView->setScale(2.0f);
        layout->addChild(imageView);
        
        //テキスト
        auto label = Text::create(StringUtils::format("%dページ",(i+1)), "fonts/Marker Felt.ttf", 30);
        label->setColor(Color3B(Color3B::BLUE));
        label->setPosition(Point(layout->getSize().width / 2, layout->getSize().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);
    }
}

結果はこんな感じ


Cocos2dx pageView - YouTube

実はこれCocostudioでやろうと思ったんですけど
ページ数が可変だったのでロジック側での実装となりました。

CocostudioForMacのAnimationEditorを心待ちにしています(ボソッ)

ご意見マサカリ等歓迎しております。