Cocos2d-x 3.0 PageViewを試してみる

raharu(仮名)(プログラマー)
これがダイバージェンス1%の先の世界か。。。

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

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

PageViewScene.h

1
2
3
4
5
6
7
8
9
10
11
12
#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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#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を心待ちにしています(ボソッ)

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