失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView

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

时间:2022-10-16 04:05:42

相关推荐

Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择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);}

点击下载代码 地址 /detail/lideguo1979/8268033

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

版权声明:本文博主原创文章,博客,未经同意。

如果觉得《Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。