cocos2d-x-3.3 中采用extension的ScrollView实现纵向分页

 1 //
 2 //  extensionScrollView.h
 3 //  VerticalScroll
 4 //
 5 //  Created by students on 16/1/7.
 6 //
 7 //
 8 
 9 #ifndef __VerticalScroll__extensionScrollView__
10 #define __VerticalScroll__extensionScrollView__
11 
12 #include <stdio.h>
13 #include <cocos2d.h>
14 #include <extensions/cocos-ext.h>
15 USING_NS_CC;
16 USING_NS_CC_EXT;
17 class ScrollViewTest:public ScrollViewDelegate,public Layer
18 {
19 public:
20     CREATE_FUNC(ScrollViewTest);
21     bool init();
22     
23     virtual void scrollViewDidScroll(ScrollView* view) override;
24     virtual void scrollViewDidZoom(ScrollView* view) override;
25     
26     bool bagan(Touch* touch,Event* event);
27     void moved(Touch* touch,Event* event);
28     void ended(Touch* touch,Event* event);
29     void canceled(Touch* touch,Event* event);
30 };
31 
32 #endif /* defined(__VerticalScroll__extensionScrollView__) */
 1 //
 2 //  extensionScrollView.cpp
 3 //  VerticalScroll
 4 //
 5 //  Created by students on 16/1/7.
 6 //
 7 //
 8 
 9 #include "extensionScrollView.h"
10 bool ScrollViewTest::init()
11 {
12     Layer::init();
13     
14     auto Visiblesize = Director::getInstance()->getVisibleSize();
15     auto tempSpr = Sprite::create("HelloWorld.png");
16     auto sprSize = tempSpr->getContentSize();
17     auto layer = Layer::create();
18     layer->setContentSize(Size(sprSize.width,sprSize.height*3));
19     
20     Sprite* spr = nullptr;
21     Label* lab = nullptr;
22     
23     for (int i=0; i<3; i++) {
24         spr=Sprite::create("HelloWorld.png");
25         spr->setAnchorPoint(Vec2::ZERO);
26         
27         std::string str = StringUtils::format("%d",i);
28         lab=Label::createWithSystemFont(str, "", 40);
29         lab->setColor(Color3B::RED);
30         lab->setPosition(sprSize/2);
31         spr->addChild(lab);
32         spr->setPosition(Vec2(0, i*sprSize.height));
33         layer->addChild(spr);
34     }
35     using namespace extension;
36     auto scroll = ScrollView::create(sprSize,layer);
37     scroll->setContentOffsetInDuration(Vec2(0, -640), 3.0);
38     scroll->setPosition(Visiblesize/2-sprSize/2);//??
39     scroll->setDirection(ScrollView::Direction::VERTICAL);
40     scroll->setBounceable(true);
41     scroll->setTag(1);
42     
43     scroll->setDelegate(this);
44     addChild(scroll);
45     
46     auto listener = EventListenerTouchOneByOne::create();
47     listener->onTouchBegan = CC_CALLBACK_2(ScrollViewTest::bagan, this);
48     listener->onTouchMoved = CC_CALLBACK_2(ScrollViewTest::moved, this);
49     listener->onTouchEnded = CC_CALLBACK_2(ScrollViewTest::ended, this);
50     listener->onTouchCancelled = CC_CALLBACK_2(ScrollViewTest::canceled, this);
51     Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
52     
53     return true;
54 }
55 
56 void ScrollViewTest::scrollViewDidScroll(ScrollView* view)
57 {
58     auto offset = view->getContentOffset();
59     log("%f,%f",offset.x,offset.y);
60 }
61 void ScrollViewTest::scrollViewDidZoom(ScrollView* view)
62 {
63     auto scale = view->getZoomScale();
64     log("%4.2f",scale);
65 }
66 
67 bool ScrollViewTest::bagan(Touch* touch,Event* event)
68 {
69 //    return false;
70     
71     auto view = (ScrollView*)getChildByTag(1);
72     auto bb = view->getBoundingBox();
73     if (bb.containsPoint(touch->getLocation())) {
74         return true;
75     }
76     return false;
77 }
78 void ScrollViewTest::moved(Touch* touch,Event* event)
79 {
80     
81 }
82 void ScrollViewTest::ended(Touch* touch,Event* event)
83 {
84     auto view = (ScrollView*)getChildByTag(1);
85     view->unscheduleAllCallbacks();
86     auto offset = view->getContentOffset();
87     int topn = ((int)offset.y)/320;
88     int buttom = topn-1;
89     if (touch->getStartLocation().y<touch->getLocation().y) {
90         view->setContentOffsetInDuration(Vec2(0, topn*320), 0.2);
91     }else
92     {
93         view->setContentOffsetInDuration(Vec2(0, buttom*320), 0.2);
94     }
95 }
96 void ScrollViewTest::canceled(Touch* touch,Event* event)
97 {
98     
99 }

 

转载于:https://www.cnblogs.com/lsy137/p/5110619.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值