【转载】cocos2d-x3.0 关于ScrollView的使用


本文主要介绍下ScrollView在cocos2dx中的使用,其主要用来实现关卡的选择,以及人物拖拽选择等方面。比如:

人物选择:

关卡选择:

其他不多说直接进入主题:

.h文件

#include"cocos2d.h"

#include"cocos-ext.h"

USING_NS_CC_EXT;

USING_NS_CC;

使用scrollview要引入头文件

然后继承ScrollViewDelegate

classHelloWorld :publicLayer,publicScrollViewDelegate

{

public:

staticScene* createScene();

virtualboolinit();

voidmenuCloseCallback(Object* pSender);

CREATE_FUNC(HelloWorld);

private:

//ScrollView中必须实现的2个虚函数方法

virtualvoidscrollViewDidScroll(ScrollView* view);

virtualvoidscrollViewDidZoom(ScrollView* view);

Node* create9Sprite(floatpWith,floatpHeight);//创建9妹精灵

boolonTouchBegan(Touch* touch,Event* event);//触摸开始方法

voidonTouchMoved(Touch* touch,Event* event);//触摸移动方法

voidonTouchEnded(Touch* touch,Event* event);//触摸结束方法

private:

intx; //scrollView的当前横坐标

ScrollView*scrollView;

};

.cpp

USING_NS_CC;

#define NUM10

Scene*HelloWorld::createScene()

{

autoscene =Scene::create();

autolayer =HelloWorld::create();

scene->addChild(layer);

returnscene;

}

Node*HelloWorld::create9Sprite(floatpWith,floatpHeight)

{

autosprite9 =Scale9Sprite::create("button.png");

LabelTTF*label =LabelTTF::create("Demo","",50);

//创建按钮cb

ControlButton* cb =ControlButton::create(sprite9);

//setPreferredSize就是设置需要生成的尺寸大小

/*强制设置按钮大小,如果按钮标题大小超过这个范围,则会自动扩大*/

cb->setPreferredSize(Size(190,190));

cb->setPosition(Point(pWith, pHeight));

returncb;

}

boolHelloWorld::init()

{

if(!Layer::init()){returnfalse;}

SizescreenSize=Director::getInstance()->getVisibleSize();

Sprite*bg=Sprite::create("HelloWorld.png");

bg->setPosition(screenSize.width/2,screenSize.height/2);

bg->setOpacity(125);

addChild(bg,2);

//设置容器

Layer* continerLayer =Layer::create();

continerLayer->setContentSize(Size(NUM*200,200));//设置滚动区域的大小

continerLayer->setPosition(Point(0,0));

//添加button

for(inti =0; i<NUM; i++)

{

continerLayer->addChild(this->create9Sprite(i*200+100,100));

}

scrollView=ScrollView::create();

scrollView->setViewSize(Size(600,200));//设置滚动试图的试图大小

scrollView->setPosition(150,210);//设置位置新的层默认左下角为原点

scrollView->setContainer(continerLayer);//添加容器

scrollView->setDirection(ScrollView::Direction::HORIZONTAL);//设置滑动方向

scrollView->setDelegate(this);//注册

this->addChild(scrollView);//添加

//创建屏幕监听事件

autolistener =EventListenerTouchOneByOne::create();

//设置可向下传递

listener->setSwallowTouches(true);

listener->onTouchBegan=CC_CALLBACK_2(HelloWorld::onTouchBegan,this);

listener->onTouchMoved=CC_CALLBACK_2(HelloWorld::onTouchMoved,this);

listener->onTouchEnded=CC_CALLBACK_2(HelloWorld::onTouchEnded,this);

_eventDispatcher->addEventListenerWithSceneGraphPriority(listener,this);

returntrue;

}

boolHelloWorld::onTouchBegan(Touch* touch,Event* event)

{

returntrue;

}

voidHelloWorld::onTouchMoved(Touch* touch,Event* event)

{

x=scrollView->getContentOffset().x;//x轴的偏移量

CCLOG("%d",x);

}

voidHelloWorld::onTouchEnded(Touch* touch,Event* event)

{

//关闭CCScrollView中的自调整

scrollView->unscheduleAllSelectors();

//矫正view的位置

intoffset =x%200;

intnum =x/200;

PointadjustPos;

floatadjustAnimDelay;//慢慢返回中间的位置需要的时间

//图片在几种特殊情况下的处理

if(offset<=-100) {

adjustPos =Point((num-1)*200,scrollView->getContentOffset().y);

adjustAnimDelay=(offset*(-1)%100)/600;

}

if(offset<=0&&offset>-100) {

adjustPos =Point(num*200,scrollView->getContentOffset().y);

adjustAnimDelay=(offset*(-1)%100)/600;

}

if(offset>0) {

adjustPos =Point(0,scrollView->getContentOffset().y);

adjustAnimDelay=(offset*(1)%100)/600;

}

if(x<=-1400) {

adjustPos =Point(-1400,scrollView->getContentOffset().y);

adjustAnimDelay=(offset*(-1)%100)/600;

}

adjustAnimDelay=0.7;

scrollView->setContentOffsetInDuration(adjustPos, adjustAnimDelay);//调整位置

}

voidHelloWorld::scrollViewDidScroll(ScrollView* view)

{

return;

}

voidHelloWorld::scrollViewDidZoom(ScrollView* view)

{

return;

}

不太会用这写东西 大家将就看吧!

优质内容筛选与推荐>>
1、lua栈
2、Trigger完整定义(摘抄)
3、linux nginx环境搭建
4、64.广搜练习跳马问题
5、基于C#利用ffmpeg提取视频帧


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号