亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

Cocos2d-x中使用CCScrollView來實現關卡選擇實例

2020-01-26 15:19:21
字體:
來源:轉載
供稿:網友

類似關卡選擇的這種功能游戲中經??吹?,比如幫助場景,選擇關卡,通過滑動的方式選擇一些其他的東西等等。今天我們實現關卡的選擇是使用CCScrollView這個類。當然還有一些其他的方法,比如使用cocostudio的page view也可以。我先說下整體的思路,CCScrollView這個類是繼承自CCLayer的,本身的觸摸事件有些bug,所以網上一般將這個層的touch事件處理為false,而使用它的父節點來處理觸摸事件,我們也是采用這個做法。先定義一個LevelScene類,將CCScrollView加入進來,然后再定義一個layer層,這個層里邊放的就是一些關卡的圖片,然后將layer這個層作為CCScrollView的內容添加進去。好了,現在看代碼吧。

/*關卡選擇類的頭文件*/#ifndef _LEVEL_SCENE_H_#define _LEVEL_SCENE_H_#include "cocos2d.h"http://包含以下的頭文件#include "cocos-ext.h"using namespace cocos2d::extension;using namespace cocos2d;class LevelScene : public CCLayer{public:	bool init();	CREATE_FUNC(LevelScene);	//以下是注冊觸摸事件和實現各種的touch函數	void registerWithTouchDispatcher();	bool ccTouchBegan(CCTouch * touch,CCEvent * pEvent);	void ccTouchMoved(CCTouch * touch,CCEvent * pEvent);	void ccTouchEnded(CCTouch * touch,CCEvent * pEvent);	//最后這個函數來校驗每個關卡的位置,是各個關卡都位于屏幕的中央	void adjustScrollView(float offset);private:	//將CCScrollView作為自己的層添加進來	CCScrollView * m_scrollView;	//觸摸點的位置	CCPoint m_touchPoint;	//CCScrollView的便宜量	CCPoint m_offsetPoint;	//當前為第幾個關卡	int m_nCurPage;};#endif
/*關卡選擇類的具體實現*/#include "LevelScene.h"#include <math.h>	//用到了fabs()函數,用來求絕對值的bool LevelScene::init(){	bool bRet = false;	do	{		CC_BREAK_IF(!CCLayer::init());		CCSize winSize = CCDirector::sharedDirector()->getWinSize();		//CCScrollView繼承自CCLayer,傳入的參數是view size的大小		//view size也就是人看到的大小,content size也就是內容的大小		//這里設置為整個屏幕的大小,也就是我們通過設備的整個屏幕去看里邊的內容		CCScrollView * scrollView = CCScrollView::create(CCSize(winSize.width,winSize.height));		//等同于如下的語句		/*CCScrollView * scrollView = CCScrollView::create();		scrollView->setViewSize(CCSize(winSize.width,winSize.height));*/		//以下是CCScrollView的一些常用函數,但是我們這里都不會用到,實現的思路不同		//設置是否有反彈的效果,反彈就是當超出scrollview的大小的時候回到原來的位置		//scrollView->setBounceable(true);		//CCScrollView默認錨點是在(0,0)處		//scrollView->ignoreAnchorPointForPosition(false);		//scrollView->setPosition(ccp(winSize.width/2,winSize.height/2));		//設置滑動方向		//kCCScrollViewDirectionHorizontal――水平滑動		//kCCScrollViewDirectionVertical――垂直滑動		//scrollView->setDirection(kCCScrollViewDirectionBoth);		//創建一個CCLayer,將內容添加到CCLayer中,然后將這個layer添加到scrollview中		CCLayer * layer = CCLayer::create();		for(int i = 0;i<5;i++)		{			CCString * string = CCString::createWithFormat("%d.jpg",i+1);			CCSprite * sprite = CCSprite::create(string->getCString());			//將所有的精靈都放到屏幕的中間顯示			sprite->setPosition(ccpAdd(ccp(winSize.width/2,winSize.height/2),				ccp(winSize.width*i,0)));			layer->addChild(sprite);		}		//設置scrollView中的內容,必須先設置內容再設置內容的大小		scrollView->setContainer(layer);		//setContentSize()設置內容區的大小		scrollView->setContentSize(CCSize(winSize.width*5,winSize.height));		//我們屏蔽scrollView這個層的觸摸,采用其他的實現方法		scrollView->setTouchEnabled(false);		//設置里邊內容的偏移量		scrollView->setContentOffset(CCPoint(0,0));		//讓本層來接受觸摸事件		this->setTouchEnabled(true);		this->addChild(scrollView);		m_scrollView = scrollView;		this->m_nCurPage = 0;		bRet = true;	}	while(0);	return bRet;}void LevelScene::registerWithTouchDispatcher(){	CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,true);}bool LevelScene::ccTouchBegan(CCTouch * touch,CCEvent * pEvent){	//用開始的觸摸點和scroll的偏移量初始化以下的成員變量	this->m_touchPoint = touch->getLocation();	this->m_offsetPoint = this->m_scrollView->getContentOffset();	//以下的這一點特別要注意,大家可以先注釋掉以下的這句話然后運行程序,會發現如果觸摸不是很快	//的時候不會有什么問題,但是如果觸摸進行的很快,關卡的位置偏移的就不會正確,以下的代碼正是解決這個問題到	if((int)this->m_offsetPoint.x%((int)CCDirector::sharedDirector()->getWinSize().width) == 0)	{		return true;	}	return false;}/*以下代碼的整體含義就是當手指移動的時候,讓關卡跟隨手指移動,當移動結束的時候,判斷結束點和開始觸摸點的位置,對關卡的位置做相應的處理*///設置關卡跟隨手指的方向移動void LevelScene::ccTouchMoved(CCTouch * touch,CCEvent * pEvent){	CCPoint point = touch->getLocation();	CCPoint direction = ccpSub(point,this->m_touchPoint);	//CCPoint spriteDirection = ccpAdd(this->m_offsetPoint,direction);	//只在x方向偏移	CCPoint spriteDirection = CCPoint(direction.x+this->m_offsetPoint.x,0);	this->m_scrollView->setContentOffset(spriteDirection);}//以下的代碼是重點,當結束觸摸的時候,為了使關卡顯示在屏幕的中間,我們需要這么做void LevelScene::ccTouchEnded(CCTouch * touch,CCEvent * pEvent){	CCPoint endPoint = touch->getLocation();	float distance = endPoint.x-this->m_touchPoint.x;	//手指移動的距離小于20的時候,就將偏移量作為0處理	if(fabs(distance) < 20)	{		this->adjustScrollView(0);	}	else	{		//將偏移量作為參數傳進來		this->adjustScrollView(distance);	}}//調整關卡的最終位置void LevelScene::adjustScrollView(float offset){	 CCSize winSize = CCDirector::sharedDirector()->getWinSize();  // 我們根據 offset 的實際情況來判斷移動效果	 //如果手指往左劃,offset大于0,說明頁面在減小,往右增大  if (offset < 0)    m_nCurPage ++;  else if (offset > 0)    m_nCurPage --;	//不允許超出最左邊的一頁和最右邊的一頁  if (m_nCurPage < 0)    m_nCurPage = 0;  else if (m_nCurPage > 4)    m_nCurPage = 4;  CCPoint adjustPoint = ccp(-winSize.width * m_nCurPage , 0);	//這個函數比setContentOffset多了一個參數,第二個參數是設置時間的,就是用多長的時間來改變偏移量  this->m_scrollView->setContentOffsetInDuration(adjustPoint, 0.3f);}
bool HelloWorld::init(){  //////////////////////////////  // 1. super init first  if ( !CCLayer::init() )  {    return false;  }  CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();	//添加背景圖片	CCSprite * sprite = CCSprite::create("background.png");	sprite->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));	this->addChild(sprite);	//添加CCScrollView層	LevelScene * scrollView = LevelScene::create();	this->addChild(scrollView);  return true;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人在线观看| 久久成人免费视频| 亚洲伊人第一页| 欧美精品www在线观看| 亚洲第一精品久久忘忧草社区| 久久久久免费视频| 国产精品视频色| 国产成人精品一区二区在线| 欧美电影免费看| 国产精品视频一区国模私拍| 国产主播欧美精品| 日韩av免费在线观看| 精品国产依人香蕉在线精品| 亚洲欧美制服丝袜| 中文字幕国产亚洲2019| 亚洲一区二区久久| 欧美亚洲伦理www| 日韩69视频在线观看| 欧美福利视频网站| 91性高湖久久久久久久久_久久99| 久久精品视频一| 欧美激情在线观看| 亚洲最新av在线| 国产欧美精品一区二区| 亚洲精品国产综合久久| 国产精品xxxxx| 91久久久久久久久久久久久| 亚洲国产欧美一区二区丝袜黑人| 欧美精品一区在线播放| 精品欧美一区二区三区| 午夜精品久久久久久久99热| 97免费中文视频在线观看| 亚洲成人av中文字幕| 国产亚洲成av人片在线观看桃| 国产精品偷伦一区二区| 久久久精品网站| 欧美高清在线视频观看不卡| 亚洲欧美日韩精品久久| 欧美精品18videosex性欧美| 欧美激情视频播放| 91精品视频在线| 亚洲国产精品国自产拍av秋霞| 久久91超碰青草是什么| 亚洲精品久久久久久久久久久久| 日本精品久久久久影院| 成人午夜高潮视频| 欧美日本啪啪无遮挡网站| 不用播放器成人网| 精品视频久久久久久久| 欧美激情一级欧美精品| 精品久久久久久久久中文字幕| 亚洲美女久久久| 日韩hd视频在线观看| 欧美激情免费在线| 日韩一中文字幕| 在线视频欧美日韩精品| 亚洲已满18点击进入在线看片| 欧美激情a∨在线视频播放| 成人黄色在线播放| 国产精品成人免费视频| 色偷偷91综合久久噜噜| 国产精品美乳在线观看| 精品成人国产在线观看男人呻吟| 国产日韩av高清| 久久夜色撩人精品| 亚洲男人av电影| 91在线免费网站| 在线播放日韩专区| 欧美日韩国产成人在线| 欧美日韩一区免费| 97色在线观看| 国产精品揄拍一区二区| 色综合伊人色综合网| 这里只有精品丝袜| 久久久久久中文字幕| 亚洲jizzjizz日本少妇| 91黑丝高跟在线| 久久久久久综合网天天| 国产一区二区美女视频| 中文字幕久久亚洲| 亚洲男人第一网站| 欧美激情国产日韩精品一区18| 欧美极品美女视频网站在线观看免费| 亚洲色图欧美制服丝袜另类第一页| 疯狂做受xxxx欧美肥白少妇| 2018日韩中文字幕| 国产精品久久国产精品99gif| 91精品国产高清自在线看超| 亚洲精品免费在线视频| 欧美精品18videosex性欧美| 久久精品国产一区| 亚洲精品视频二区| 欧美亚洲一级片| 亚洲精品98久久久久久中文字幕| 国产精品99久久久久久久久| 久久久久久国产精品久久| 亚洲国产三级网| 久久久成人精品视频| 日韩禁在线播放| 欧美精品久久久久a| 欧美壮男野外gaytube| 国产精品视频久久久| 久久国产加勒比精品无码| 永久免费毛片在线播放不卡| 91夜夜揉人人捏人人添红杏| 久久精品视频在线| 中文字幕亚洲精品| 最近免费中文字幕视频2019| 久久久久久久久国产| 国产精品偷伦免费视频观看的| 欧美大成色www永久网站婷| 日韩视频亚洲视频| 欧美日韩国产精品一区二区不卡中文| 国产精品久久久久久久av电影| 久久亚洲精品国产亚洲老地址| 高清亚洲成在人网站天堂| 国产精品扒开腿做| 久久天天躁狠狠躁夜夜躁| 色噜噜狠狠色综合网图区| 亚洲精品久久久久久久久久久久久| 亚洲尤物视频网| 国产一区二区视频在线观看| 国产精品久久久久久亚洲影视| 欧美高清在线视频观看不卡| 亚洲伦理中文字幕| 国产伦精品免费视频| 欧美国产日韩一区二区| 久久久久亚洲精品成人网小说| 91老司机精品视频| 中文字幕日韩在线视频| 国产日产亚洲精品| 国产日韩精品一区二区| 久久精品国产精品亚洲| 韩剧1988在线观看免费完整版| 国产精品亚洲欧美导航| 精品亚洲一区二区三区在线观看| 一区二区av在线| 亚洲欧美精品在线| 亚洲乱码一区二区| 亚洲成人激情在线观看| 精品视频在线播放免| 精品亚洲国产视频| 国产精品三级网站| 欧美性猛交xxxx富婆弯腰| 国产成人高潮免费观看精品| 日韩美女在线看| 欧美老少做受xxxx高潮| 国产精品香蕉在线观看| 国产精品高潮视频| 久久91亚洲人成电影网站| 亚洲国产成人久久综合一区| 国产精品久久久久影院日本| 欧美日韩亚洲国产一区| 国产亚洲精品va在线观看| 77777亚洲午夜久久多人| 国产成人精品a视频一区www| 日韩成人免费视频| 日韩国产欧美精品一区二区三区| 日韩精品欧美国产精品忘忧草| 欧美人交a欧美精品| 欧美激情免费视频| **欧美日韩vr在线| 国产视频久久久久久久| 高清欧美性猛交xxxx|