Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-关卡选择ScrollView

Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-关卡选择ScrollView,第1张

概述在MenuScene.cpp 点击单机游戏后会调用 Director::getInstance()->pushScene(MapChooseScene::createScene()); 进入到关卡选择界面,我们采用ScrollView控件制作这个界面 由于scrollview拖动后,位置比较随意,我想是拖动到第二张图片,就完整的显示第二张图片,不要产生偏离位置的现象,所以在移动之后需要进行位置的校



MenuScene.cpp 点击单机游戏后会调用

Director::getInstance()->pushScene(MapChooseScene::createScene());

进入到关卡选择界面,我们采用ScrollVIEw控件制作这个界面

由于scrollvIEw拖动后,位置比较随意,我想是拖动到第二张图片,就完整的显示第二张图片,不要产生偏离位置的现象,所以在移动之后需要进行位置的校正,写了一个adjustScrollVIEw()方法,用来进行该调整。

具体代码如下:


MapChooseScene.h内容:

const int  MAP_COUNT = 3;//定义了三张关卡图片const int touch_disTANCE = 50; //手势滑动距离class MapChooseScene : public Layer,public ScrollVIEwDelegate  //使用scrollvIEw需要继承此类 {…………….private:	Size visibleSize;	Layer* _SpritesContainer; //用于存放3张关卡图片的sprite 容器             int currentPage; //当前所在的是第几张关卡地图             Point begintouchPoint; //触摸按下时的位置             ScrollVIEw *scrollVIEw; //scrollvIEw对象	    voID singletouchDown(Object* pSender,Control::EventType event);	    voID addBackgroundSprite(); //添加背景方法	     voID addScrollVIEw(); //添加scrollvIEw对象及其包含的sprite            //继承 ScrollVIEwDelegate  类需要实现的3个方法              voID scrollVIEwDIDScroll(ScrollVIEw* vIEw);              voID scrollVIEwDIDZoom(ScrollVIEw* vIEw);              voID scrollVIEwMoveOver(ScrollVIEw* vIEw);	voID adjustScrollVIEw(float distance);//自定义方法,用来进行拖动后位置调整	voID ontouchended(touch*touch,Event *unused_event);	bool ontouchBegan(touch * touch,Event *unused_event);        voID ontouchmoved(touch *touch,Event *unused_event);};


MapChooseScene.cpp文件内容:


bool MapChooseScene::init(){	if ( !Layer::init() )	{		return false;	}	visibleSize = Director::getInstance()->getVisibleSize();	               currentPage = 1;//默认当前是第一张关卡图片	addBackgroundSprite(); //添加背景	addScrollVIEw();//添加scrollvIEw                //添加触摸监听	settouchMode(touch::dispatchMode::ONE_BY_ONE);	auto Listener = EventListenertouchOneByOne::create();	Listener->setSwallowtouches(true);	Listener->ontouchBegan=CC_CALLBACK_2(MapChooseScene::ontouchBegan,this);	Listener->ontouchmoved=CC_CALLBACK_2(MapChooseScene::ontouchmoved,this);	Listener->ontouchended=CC_CALLBACK_2(MapChooseScene::ontouchended,this);	Director::getInstance()->getEventdispatcher()->addEventListenerWithSceneGraPHPriority(Listener,this);	return true;}

主要来看addScrollVIEw()方法,他的主要功能就是创建3个关卡图片sprite,并添加到Layer类容器SpritesContainer对象中,水平排列显示


voID MapChooseScene::addScrollVIEw(){	_SpritesContainer = Layer::create();//创建地图sprite,添加到SpritesContainer中	Sprite* beachSprite = Sprite::create(BEACH_ITEM);	Sprite* seaSprite = Sprite::create(SEA_ITEM);	Sprite* moonsprite = Sprite::create(MOON_ITEM);	_SpritesContainer->addChild(beachSprite);	beachSprite->setposition(ccpAdd(center,ccp(0,0)));	_SpritesContainer->addChild(seaSprite);	seaSprite->setposition(ccpAdd(center,ccp(visibleSize.wIDth,0)));	_SpritesContainer->addChild(moonsprite);	moonsprite->setposition(ccpAdd(center,ccp(2*visibleSize.wIDth,0)));	_SpritesContainer->setposition(CCPointZero);	_SpritesContainer->setContentSize(CCSize(visibleSize.wIDth * MAP_COUNT,visibleSize.height));//容器大小//进行scrollVIEw对象的创建 并进行相关设置	scrollVIEw = ScrollVIEw::create();		scrollVIEw->setContainer(_SpritesContainer);	scrollVIEw->setDirection(ScrollVIEw::Direction::HORIZONTAL);//水平显示	scrollVIEw->settouchEnabled(true);	scrollVIEw->setposition(CCPointZero);		scrollVIEw->setVIEwSize(CCSizeMake(visibleSize);//每个关卡图片显示的大小	scrollVIEw->setContentOffset(CCPointZero,true);	scrollVIEw->setContentSize(CCSize(visibleSize.wIDth * MAP_COUNT,visibleSize.height));//scrollvIEw 大小同SpritesContainer相同	scrollVIEw->setDelegate(this);	scrollVIEw->setBounceable(false);	addChild(scrollVIEw);}

按下后给begintouchPoint赋值bool MapChooseScene::ontouchBegan(touch * touch,Event *unused_event){	begintouchPoint = Director::getInstance()->convertToGL(touch->getLocationInVIEw());	log("touch begain");	return true;}//触摸结束后,获取触摸距离,并调用图片位置校正方法adjustScrollVIEwvoID MapChooseScene::ontouchended(touch*touch,Event *unused_event){Point endPoint = Director::getInstance()->convertToGL(touch->getLocationInVIEw());    float distance = endPoint.x - begintouchPoint.x;    if(fabs(distance) > touch_disTANCE)    {        adjustScrollVIEw(distance);    }}


校正方法,根据触摸滑动的位置距离差值,确认是向左或向右滑动,如果是向左滑动当前页递增,否则递减 ,最小值为1 最大值为3

然后根据图片是第几页设置scrollvIEw的Offset ,从而实现位置校正


voID MapChooseScene::adjustScrollVIEw(float offset){    if (offset<0)    {        currentPage ++;    }else    {        currentPage --;    }     if (currentPage <1)    {        currentPage = 1;    }     if(currentPage > MAP_COUNT)    {        currentPage = MAP_COUNT;    }        CCPoint  adjustPos = ccp(- visibleSize.wIDth * (currentPage-1),0);        scrollVIEw->setContentOffset(adjustPos,true);}

点击下载代码 地址 http://download.csdn.net/detail/lIDeguo1979/8268033


未完待续..............................

总结

以上是内存溢出为你收集整理的Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-关卡选择ScrollView全部内容,希望文章能够帮你解决Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-关卡选择ScrollView所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1022495.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存